一个乱序的数组通过插入排序排列整齐。
从数组第二个数开始,拿着这个数向他的左边进行依次比较,发现比他大的数就插进去,将原来的数向右移动
再接着向左比较
假设开始时
4 6 7 5 1
第一遍 4 6 7 5 1
第二遍 4 6 7 5 1
第三遍 4 6 5 7 1
第四遍4 5 6 7 1
第五遍4 5 6 1 7
第六遍4 5 1 6 7
第七遍4 1 5 6 7
第八遍1 4 5 6 7
比较完成
public static void test2(int[] a){
for(int i=1;i<a.length;i++){ //从第二个数开始遍历
int tem=a[i]; //先将当前的数记录下来,用它和左边所有进行比较
int j=i; //当前位置
/*
* 这里比如说j==5,先将j-1 变成4 因为4大于等于0 所以继续
* 用第四个数和我们记录下来想要插入的数进行比较,若大于我们想要插入的数就交换
* 4 5 6 7 如果想插入4.5进去 现在是4 5 6 7 4.5
* 第一步将4.5记下来 j=4 a[3]>a[4]
* 第二步和7比较 7>4.5 则 4 5 6 7 7
* 接下来 4 5 6 4.5 7
*
* 接下来 6>4.5
* 4 5 6 6 7
* 4 5 4.5 6 7
*
* 接下来
* 4 5 5 6 7
* 4 4.5 5 6 7
*
* 接下来不满足添加退出while
* */
while(--j>=0 && a[j]>tem){
a[j+1]=a[j];
a[j]=tem;
}
}
System.out.println("排序后:"+Arrays.toString(a));
}
结果:
排序前:[6, 1, 2, 3, 5, 4, 8, 9, 4, 1]
排序后:[1, 1, 2, 3, 4, 4, 5, 6, 8, 9]