原理
为了给插入的元素腾出空间,我们需要将其余所有元素在插入之前都向右移动一位。
插入排序对于实际应用中常见的某些类型的非随机数组很有效。
对于随机排列的长度为N且主键不重复的数组,平均情况下插入排序需要~N2/4次比较以及~N2/4次交换。最坏情况下需要~N2/2次比较和~N2/2次交换,最好的情况需要N-1次比较和0次交换。
具体算法
public static void sort(Comparable[] a) { int i,j; for(i=0;i<a.length;i++) { for(j=i;j>0&&less(a[j],a[j-1]);j--) { exch(a,j,j-1); } } } private static void exch(Comparable[] a,int i,int j) { Comparable t = a[i]; a[i]=a[j]; a[j] = t; } public static boolean less(Comparable v,Comparable w) { return v.compareTo(w)<0; }