插入排序又可分为直接插入排序、希尔排序
1、直接插入排序:时间复杂度O(n^2)
public static void insertionSort(int[]a){
int j;
for(int p=1;p<a.length;p++){
int temp=a[p];
//这里是降序
for(j=p;j>0&&temp<a[j-1];j--){
a[j]=a[j-1];
a[j-1]=temp;
}
}
}
2、希尔排序:时间复杂度O(n^2),实际上是一种分组插入排序
public static void shellsort(int [] a){
int j;
for(int gap=a.length/2;gap>0;gap/=2){
for(int i=gap;i<a.length;i++){
int tmp=a[i];
int j=i;
for(j=i;j>=gap&&temp<a[j-gap];i-=gap){
a[j]=a[j-gap];
}
a[j]=temp;
}
}
}