思想
n= nums.length
就像打扑克摸牌,我们摸一张就插入到它相应的位置,但是注意,我们数组的插入往往伴随着不止一个数的移动!例如:我们要把4,6,3要把3插入到相应位置,是把3与6换位置,再与4换位置才能实现。
明显,插入排序从第二个数开始比较(有点像 往前的冒泡?),逆序则交换。
package com.Gordon;
public class InsertionSort {
public static void InsertionSort(int[] arr){
for(int i = 1;i<arr.length;i++){
while (i>0&&arr[i]<arr[i-1]){
Swap.arr(arr,i,i-1);
i=i-1;
}
}
System.out.println("afterInsertionSort");
Print.arr(arr);
}
}
Print.arr和Swap.arr分别是打印数组和交换数组的两个值
优化:我们可以不使用交换来达到插入,而是当需要交换时,直接保存这个小的数,然后直接赋予。实现方法while中再嵌套一个while即可。这里不做实现。