直接插入排序:和自己前面的数比较,如果发现大于自己的,数组往后移一个位置,空出来的位置放自己的值。
直接选择排序:和自己后面的数比较,如果找到小于自己的最小数,元素转换。
冒泡排序:相邻的两个元素相互比较,如果不满足条件元素相互转换。
快速排序:把数组分为两部分,值高于参考值的和值低于参考值的,这样不断地递归排序。下面是我练习的代码:
写道
package my.sort;
public class Sort {
/**
* @param args
*/
/*public static void main(String[] args) {
int[] a={35,32,31,30,29,28,27,26};
if(Sort.sort(a).length>0){
int[] b=Sort.sort(a);
for(int m=0;m<b.length;m++){
if(m==b.length-1)
System.out.print(b[m]);
else
System.out.print(b[m]+" ,");
}
}
}*/
/*public static void main(String[] args) {
int[] a={35,32,31,30,29,28,27,26,25};
if(Sort.chooseSort(a).length>0){
int[] b=Sort.chooseSort(a);
for(int m=0;m<b.length;m++){
if(m==b.length-1)
System.out.print(b[m]);
else
System.out.print(b[m]+" ,");
}
}
}*/
/*public static void main(String[] args) {
int[] a={35,32,31,30,29,28,27,26,25,24};
if(Sort.bubbleSort(a).length>0){
int[] b=Sort.bubbleSort(a);
for(int m=0;m<b.length;m++){
if(m==b.length-1)
System.out.print(b[m]);
else
System.out.print(b[m]+" ,");
}
}
}*/
public static void main(String[] args) {
int[] a={35,32,31,30,29,28,27,26,25,24,23,22};
if(Sort.quickSort(a,0,a.length-1).length>0){
int[] b=Sort.quickSort(a,0,a.length-1);
for(int m=0;m<b.length;m++){
if(m==b.length-1)
System.out.print(b[m]);
else
System.out.print(b[m]+" ,");
}
}
}
//直接插入排序
private static int[] sort(int[] a){
//获取数组元素
for(int i=0;i<a.length;i++){
//获取下标小于自己的数组元素
for(int j=0;j<i;j++){
//发现数值大于自己值的数组元素
if(a[i]<a[j]){
int temp=a[i];//保存自己值
for(int k=i;k>j;k--)
a[k]=a[k-1];//数组元素往后移一个位置
a[j]=temp; //保存的值放进去
}
}
}
return a;
}
//直接选择排序
private static int[] chooseSort(int[] a){
//获取数组元素
for(int i=0;i<a.length;i++){
int k=i;
for(int j=i+1;j<a.length;j++){//获取下标大于自己下标数组元素
if(a[j]<a[k])//发现数值小于自己数值的元素,保存其下标
k=j;
}
//找到了最小的数值,转换位置
if(k!=i){
int temp=a[k];
a[k]=a[i];
a[i]=temp;
}
}
return a;
}
//冒泡排序
private static int[] bubbleSort(int[] a ){
//遍历数组
for(int i=0;i<a.length-1;i++){
//数组元素与其后面的数组元素比较数值大小,发现值大于后面的,转换位置
for(int j=0;j<a.length-i-1;j++){
if(a[j+1]<a[j]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
return a;
}
//快速排序
private static int[] quickSort(int[] a,int low,int high){
int i,j,temp;
if(low<high){
i=low;
j=high;
temp=a[i];
while(i<j){
/*临时变量temp从数组最后一个元素开始比较,
情况A.直到发现小于或等于temp的元素停止,j就是这个元素的下标,
情况B.没有发现j会变成j=i*/
while(i<j&&a[j]>temp) j--;
//情况A下,值较小的下标为j的元素放在下标i的位置
if(i<j){
a[i]=a[j];
i++;//i加1
}
/*临时变量temp从其后面的数据元素开始比较,
情况A.直到发现大于或等于temp的元素停止,i就是这个元素的下标,
情况B.没有发现i会变成i=j*/
while(i<j&&a[i]<temp) i++;
//情况A下,值较大的下标为i的元素放在下标j的位置
if(i<j){
a[j]=a[i];
j--;//j减1
}
}
a[i]=temp;//确定临时变量temp在数组a中的升序位置
//值为小于temp的数据元素快速排序
quickSort(a,low,i-1);
//值为大于temp的数据元素快速排序
quickSort(a, i+1, high);
}
return a;
}
}
分享到:
相关推荐
在本系统中,我们主要实现了五种常用的排序算法:冒泡排序法、快速排序法、直接插入排序法、折半插入排序法和树形选择排序法。这些算法都是在计算机科学中最基本和最重要的排序算法,广泛应用于各种数据处理和分析...
常见的经典排序算法有希尔排序、二分插入法、直接插入法、带哨兵的直接排序法、冒泡排序、选择排序、快速排序、堆排序等。 一、希尔排序(Shell 排序法) 希尔排序法,又称宿小增量排序,是 1959 年由 D.L.Shell ...
常见的排序算法有插入排序、快速排序、选择堆积排序法等。 插入排序算法是一种简单的排序算法,适用于小规模的数据结构。该算法将数据结构分成已排序部分和未排序部分,并将未排序部分的元素插入到已排序部分中。...
在计算机科学领域,排序算法是数据处理中的核心部分,它涉及到如何有效地重新排列一组数据,使其按照特定的顺序排列。本资源"总结了各种排序算法,并用C++代码实现,并有演示",提供了丰富的学习材料,包括不同类型...
希尔排序是一种基于插入排序的算法,通过将待排序的数组元素按某个增量分组,然后对每组使用直接插入排序算法排序。随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止...
本篇文章将介绍一种经典的排序算法——**合并排序法**(Merge Sort),并通过C语言实现该算法。合并排序是一种非常有效的排序方法,其核心思想是分治法:将数据分为若干个子集,对这些子集分别进行排序,最后将排序...
最快的排序算法 最快的内部排序法—桶排序法,排序算法数据结构
在IT领域,排序算法是计算机科学中的基础但至关重要的概念,尤其在数据处理和算法设计中扮演着核心角色。本文将深入探讨标题中提到的几种基于比较的排序算法:选择排序、插入排序、归并排序、快速排序、堆排序、冒泡...
最快的排序算法 最快的内部排序法—桶排序法 (1),排序算法数据结构
在计算机科学领域中,排序算法是一种基本的算法,它可以将数据按照一定的顺序排列,以便更好地存储、检索和处理数据。排序算法的速度和效率对程序的性能有着至关重要的影响。 1.冒泡排序算法 冒泡排序算法是一种...
该程序包含7大排序算法: # sort.bubbleSort() #冒泡排序 # sort.shellSort() #希尔排序 # sort.insertionSort() #插入排序 # sort.Selectionsort1() #选择排序 # sort.heapSort() #堆排序 # sort.countSort() ...
根据给定文件的信息,本文将深入探讨C语言中的两种经典排序方法:插入排序法与冒泡排序法。这两种方法在实际编程中应用广泛,对于理解数据结构与算法的基础概念至关重要。 ### 一、冒泡排序法 #### 1.1 基本原理 ...
双向起泡排序法是一种在链表结构中实现的排序算法,尤其适用于双向链表。它借鉴了传统冒泡排序的基本思想,但在链表环境中进行了优化,以提高效率。本篇文章将详细探讨双向起泡排序法及其在带头结点的双向链表中的...
六种排序算法的排序系统 本篇文章主要讲解了六种排序算法的排序系统,包括插入排序、冒泡排序、选择排序、快速排序、堆排序和归并排序。该系统可以让用户选择六种排序算法中的任意一个,并输出结果。 插入排序 ...
在IT领域,排序算法是计算机科学中的基础但至关重要的部分,尤其在数据处理和数据分析中起着关键作用。本文将详细探讨标题所提及的几种排序算法:合并排序、插入排序、希尔排序、快速排序、冒泡排序以及桶排序,并...
在计算机科学中,排序算法是数据结构领域的重要组成部分,它涉及到如何有效地重新排列一组数据,使其按照特定的顺序排列。本资源提供了三种经典的排序算法的C语言实现:堆排序、直接插入排序和快速排序。 首先,让...
在计算机科学领域,排序算法是数据处理中至关重要的一部分,它涉及到如何有效地重新排列一组数据,使其按照特定的顺序排列。本资源提供了七大经典排序算法的实现程序,包括快速排序、冒泡排序、选择排序、归并排序、...
时间复杂度用于衡量排序算法的效率,通常以大O表示法来表示。文档中提到了几种不同排序算法的时间复杂度: - **O(n²)**:插入排序、冒泡排序和选择排序的时间复杂度均为O(n²),这意味着随着数据量的增加,这些...
排序算法是计算机科学中最基础和重要的算法之一,用于将一组数据按照特定的顺序进行排列。本文将对几种常见的内部排序算法和外部排序算法进行详细总结。 首先,排序的基本定义是:给定一个包含n个记录的序列,其...
在编程领域,排序算法是计算机科学中的重要组成部分,特别是在数据处理和算法效率分析上。本文将详细介绍C++中实现的希尔排序、快速排序、堆排序和归并排序这四种经典排序算法。 希尔排序,由Donald Shell于1959年...