插入排序分为直接插入排序和希尔排序
1 直接插入排序
时间复杂度:O(N²)
如果给定的是一个有序数组,时间复杂度:O(N²)
稳定性:稳定
public static void insertSort(int[] array){
int tmp=0;
for(int i=1;i<array.length;i++){
tmp=array[i];
int j=0;
for(j=i-1;j>=0;j--){//j从前向后遍历
if(array[j]>tmp){
array[j+1]=array[j];
}else{
break;
}
}
array[j+1]=tmp;
}
}
2 希尔排序
推理出的平均时间复杂度一般为: O(N^1.3)~ O(N^1.5)
稳定性:不稳定
//有序插入排序
public static void shell(int[] array,int gap){
int i=0;
int j=0;
for(i=gap;i<array.length;i++){
int tmp=array[i];
for(j=i-gap;j>=0;j=j-gap){
if(array[j]>tmp){
array[j+gap]=array[j];
}else{
break;
}
}
array[j+gap]=tmp;
}
}
public static void shellSort(int[] array){
int[] drr={5,3,1};//对数组进行的分组个数
//一般我们取互为素数的一组数据分组
for(int i=0;i<drr.length;i++){
shell(array,drr[i]);
}
}