思路
插入排序将要排序的数据分为有序区和无序区
不断的从无序区取数插入到有序区,直到所有排序完毕
如:
3,-1,9,10,-2,5,1,8
第一轮 3 |-1,9,10,-2,5,1,8
第二轮 -1,3|9,10,-2,5,1,8
第三轮 -1,3,9|10,-2,5,1,8
第四轮 -1,3,9,10|-2,5,1,8
第五轮 -2,-1,3,9,10|5,1,8
第六轮 -2,-1,3,5,9,10|1,8
第七轮 -2,-1,1,3,5,9,10|8
第八轮 -2,-1,1,3,5,8,9,10|
代码实现:
public static void main(String[] args) {
int[] array= {3,-1,9,10,-2,5,1,8};
for(int i=1;i<array.length;i++) {
int insertval = array[i];
int insertindex = i-1;
while(insertindex>=0&&insertval<array[insertindex]) {
array[insertindex+1] = array[insertindex];
insertindex--;
}
array[insertindex+1] = insertval;
}
System.out.println(Arrays.toString(array));
}
第二次后插入的三种情况
第一种 (插入的比有序区都要大)
-1,3|8
判断insertval<array[insertindex]为false
-1,3,8|
第二种(插入的比有序区要小)
3,8|-1
------
insertval = -1
insertindex = 1
3,8,8
insertindex --
insertindex = 0
-1<3
3,3,8
insertindex--=-1<0
array[insertindex+1] = insertval
-1,3,8
第三种(插入的在有序区之间)
-1,8|3
insertval = 3
insertindex = 1
第一轮后
-1,8,8
insertindex--
insertindex = 0
insertval<array[insertindex] = false
跳出循环
array【insertindex+1】 = insertval
-1,3,8