1. 概述
插入排序的过程我们可以类比 打牌时理牌 的过程,假如手中已有 3、7、9,又拿到一张 6,那么我们怎么找6的位置
呢?先与 9 比较,发现比9小,则互换位置;然后和 7 比,发现比 7 小,则互换位置,再和 3 比较,比 3 大,至此比较
结束,弄清楚了这个流程,代码就好写了。
2. pseudo-code(伪码)
for i=1 to length(A) {
j=i
while(j > 0 and A[j-1] > A[j]) {
swap( A[j], A[j-1] )
j--
}
}
3. code
public static void insertSort(int[] x) {
for (int i = 1; i < x.length; i++)
for (int j = i; j > 0 && x[j-1] > x[j]; j--)
swap(x, j, j - 1);
}
private static void swap(int x[], int a, int b) {
int t = x[a];
x[a] = x[b];
x[b] = t;
}
4. Analysis
最好情况 O(n),最坏情况 O(n*n),good for small inputs.