插入排序算是比较简单易懂的一种排序方法,和扑克牌排序类似。通俗来说就是每拿到一张牌,和手上的牌比较,插入到合适的位置,每次都是手上的牌已经排好序,从桌上随意拿一张插入其中,直到全部插入,排序完成。
桌上的牌就相当于我们要排序的一组数。插入排序采用的是原址排序的方法,省空间,所谓原址排序就是在原本的数组中操作,最多只有常数个数储存在数组外面。其实现算法如下:
INSERTION-SORT(A)
for j=2 to A.length //从第二个开始插入,直到全部插入完
key=A[j] //创建一个变量保存当前需要插入的数的值
i=j-1 //开始和要插入的数前一个比较
while i>0 and A[i]>key //前面还存在需要比较的数且前面的数更大时
A[i+1]=A[i] //把前面更大的数赋给后一个
i=i-1
A[i+1]=key //直到前面没数或者前面的数小于要插入的数时,将要插入的数赋给该数后一个即可
用java来实现如下:
public static void insertSort(int[] A) {
for(int j = 2;j <= A.length;j++){
int key = A[j-1];
int i = j-1;
while(i > 0&&A[i-1]>key){//转化成数组下标时要减一
A[i-1+1] = A[i-1];
i--;
}
A[i-1+1] = key;
}
}
实现的时候注意下标即可。