简单排序中最好用且稳定,比选择,冒泡的效率高
对于样本小且基本有序的时候效率比较高
思想: 每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
平均时间复杂度:O(n²),空间复杂度:1,稳定
基础版:
public class Insertion {
public void insertion(){
int[] arry2={32,3124,435,6,889,79,3,56,33,56,87};
for(int i=1;i<arry2.length;i++){ //从数组第二个数开始遍历
for (int j=i;j>0;j--){ //把这个数与前面的数相比较
if (arry2[j]<arry2[j-1]){ //若这个数小于前面的数
int temp=arry2[j]; //交换这两个数
arry2[j]=arry2[j-1];
arry2[j-1]=temp;
}
}
}
for (int i=0;i<arry2.length;i++) {
System.out.print(arry2[i]+" ");
}
}
}
优化版:
public class Insertion {
public void insertion(){
int[] arry2={32,3124,435,6,889,79,3,56,33,56,87};
for(int i=1;i<arry2.length;i++){ //从数组第二个数开始遍历
int temp=arry2[i]; //保存当前数
int j;
for(j=i;j>0;j--){
if(temp<arry2[j-1]){ //判断这个数是否比前面的数小
arry2[j]=arry2[j-1]; //直接把前面的数往后移
}else {
break;
}
}
arry2[j]=temp; //再把这个数插入到合适位置
}
for (int i=0;i<arry2.length;i++) {
System.out.print(arry2[i]+" ");
}
}
}
输出:
3 6 32 33 56 56 79 87 435 889 3124