一、解决方案
给定数组 a = [9,3,7,2,5,8,1,4], 对数组进行插入排序
将数组分为两个区域,排序区域和未排序区域,每一轮从未排序区域中取出第一个元素,插入到排序区域(需保证顺序)
重复以上步骤,直到整个数组有序
双重循环,第一重循环i从1开始,a[i]作为要插入的元素,记录为tmp,第二重循环从j开始,倒着往回找,一旦j的数大于tmp,就将j的数往后挪,空出位置将tmp插入。
二、代码
public static void insert(int[] a){
for (int i = 1; i < a.length; i++) {
//要插入的元素
int tmp = a[i];
int j = i - 1;
while(j>=0){
if(a[j]>tmp){
a[j+1] = a[j];
}else{
break;
}
j--;
}
a[j+1] = tmp;
}
System.out.println(Arrays.toString(a));
}
三、与选择排序比较
- 大部分情况下,插入都略优于选择;
- 有序集合插入的时间复杂度为O(n);
- 插入属于稳定排序算法,而选择属于不稳定排序。