需要掌握的基础排序
一、插入排序 1)直接插入排序2)希尔排序
二、交换排序 1)冒泡排序2)快速排序
三、选择排序 1)简单选择排序2)堆排序
四、归并排序
一、插入排序
简单的理解就是遍历整个数组,在过程中对每个数都跟前面进行比较只要比它小就往前挪。
1) 直接插入排序实现
public static void directInsert(int [] data) { int temp=0; int len=data.length; for(int i=1;i<len;i++) { temp=data[i]; int j=i-1; while(j>-1 && temp<data[j]) { data[j+1]=data[j]; j--; } data[j+1]=temp; } }
2)希尔排序
理解:http://blog.csdn.net/morewindows/article/details/6668714
按照n/2,n/4,n/8,,,,1的间隔对数组进行直接插入排序。当数组基本有序时,插入排序比较的次数最少,间隔为1的时候基本有序,最后一次执行插入排序效果最好。
public static void shellInsert(int [] data) { int temp=0; int len=data.length; for(int gap=len/2;gap>0;gap/=2)//最外围的缩小增量 { for(int i=0;i<len;i+=gap)//间隔排序比如13579 246810 这样的等间隔分组 直接插入排序 { temp=data[i]; int j=i-gap; while(j>-1 && temp<data[j]) { data[j+gap]=data[j]; j-=gap; } data[j+gap]=temp; } } }
二、交换排序
1)冒泡排序
相邻的两个数比较大小,直到交换完成。
第一趟把最大的数换到了最右边,第二趟第二大的换到了倒数第二个,每次对前n-i个数进行排序。
public static void bubble(int [] data) { int len=data.length; int cnt=0;//交换次数。假如为0,排序完成跳出 int temp=0; for(int i=1;i<len;i++)//进行n-1趟排序 { for(int j=0;j<len-i;j++) { if(data[j]>data[j+1]) { temp=data[j]; data[j]=data[j+1]; data[j+1]=temp; cnt++; } } if(cnt==0) break; cnt=0; } }
2)快速排序
时间: 2024-09-30 06:59:08