插入排序不是通过交换位置而是通过比较找到合适的位置插入元素来达到排序的目的的。
这个原理其实和插入排序是一样的。举个栗子,对5,3,8,6,4这个无序序列进行简单插入排序,首先假设第一个数的位置时正确的,想一下在拿到第一张牌的时候,没必要整理。然后3要插到5前面,把5后移一位,变成3,5,8,6,4.想一下整理牌的时候应该也是这样吧。然后8不用动,6插在8前面,8后移一位,4插在5前面,从5开始都向后移一位。注意在插入一个数的时候要保证这个数前面的数已经有序。简单插入排序的时间复杂度也是O(n^2)。
/**
* 插入排序
* @param arrays
*/
public void sort(int[] arrays) {
int length = arrays.length;
int i, j, temp;
for (i = 0; i < length-1; i++) {
j = i;
temp = arrays[i+1];
while (j > -1 && temp < arrays[j]){
arrays[j+1] = arrays[j];
j--;
}
arrays[j+1] = temp;
}
}