一、快速排序
快速排序 顾名思义是一种 速度很快的排序 分治递归的思路
举例:54,13,3,22,5,2,31 升序
图中红框部分为 每轮排序的基准
每轮结束后 比基准小的 排在基准左侧,比基准打的 排在基准右侧 直到所有区间的数字数量=1
最终结果 2 3 5 13 22 31 54
java代码:
public class QuickSort{
public static void quickSort(int[] array,int begin,int end){
if(begin){
int key=array[begin];
int low=begin;
int high=end;
while(low){
while(lowkey){
high--;
}
if(low==high){
break;
}
array[low]=array[high];
while(low<=key){
low++;
}
if(low==high){
break;
}
array[high]=array[low];
}
array[low]=key;
quickSort(array,begin,low-1);
quickSort(array,low+1,end);
}
}
public static void main(String[] args){
int[] array=new int[]{54,13,3,22,5,2,31};
quickSort(array,0,array.length-1);
for(int x:array){
System.out.print(x+" ");
}
}
}
二、插入排序
⒈ 从第一个元素开始,该元素可以认为已经被排序
⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描
⒊ 如果该元素(已排序)大于新元素,将该元素移到下一位置
⒋ 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
⒌ 将新元素插入到下一位置中
⒍ 重复步骤2~5
java代码:
public class InsertSort{
private static int[] insertSort(int[]array){
if(array == null || array.length < 2){
return array;
}
for(int i=1;i
for(int j=i;j>0;j--){
if(array[j]
int temp=array[j];
array[j]=array[j-1];
array[j-1]=temp;
}else{
break;
}
}
}
return array;
}
public static void main(String[] args){
int [] array = new int[]{55,22,13,5,2,4,32};
insertSort(array);
for(int x:array){
System.out.print(x+" ");
}
}
}
希尔排序是基于插入排序的实现,可以称为分组插入排序,目的是打破插入排序每次移动位数的限制,获得更高的效率,但希尔排序是不稳定的,体现在两点:
1.相同的元素可能在自己的组中被移动,做无用的位移
2.复杂度根据选取的增量不同而不同
java代码:
public class ShellSort{
static void shell_sort(int[] array){
for(int group=array.length/2;group>0;group/=2){
for(int i=group;i
for(int j=i-group;j>=0;j-=group){
if(array[j]>array[j+group]){
int temp=array[j];
array[j]=array[j+group];
array[j+group]=temp;
}
}
}
}
}
public static void main(String[] args){
int[] array=new int[]{5,2,8,9,1,3,4};
System.out.println("排序前");
for(int i=0;i
System.out.print(array[i]+" ");
}
shell_sort(array);
System.out.println("\n排序后");
for(int i=0;i
System.out.print(array[i]+" ");
}
}