public static void main(String[] args) {
int[] arr = {5,3,6,8,9,1,2};
insertsort(arr);
System.out.println((Arrays.toString(arr)));
}
public static void insertsort(int[] arr){
for(int bound = 1;bound<arr.length;bound++){//从数组的一号位置开始进行
int cur = bound-1;//bound-1位置代表已排序的最后那个元素。
int val = arr[bound];//先把bound位置的元素保存下来,避免搬运的时候被覆盖掉
for(cur = bound-1;cur>=0;cur--){
if(arr[cur]>val){
arr[cur+1] = arr[cur];//覆盖前面那个元素。
}else{//说明找到合适的位置了,此时直接结束内层循环。
break;
}
}
arr[cur+1] = val;//找到合适的位置后把val放在这个位置上。也就完成了插入
}
}
这里的内层循环就是在为此时比较的这个元素找到合适的位置,位置不合适的时候需要将当前位置的元素往后挪,给比较的这个元素留出位置。
插入排序是一个稳定排序,可以保证两个相同的元素经过排序后的相对位置没有变化。
插入排序的两个特点:
- 当待排序区间元素个数较少的时候,效率较高。
- 当整个数组接近有序的时候,效率也较高,因为涉及到的搬运的次数较少