实现代码:
/**
* 插入排序算法,比选择排序的性能最高可以提升1倍 ,只与当前索引前面的数据比较
*
* @param a
*/
public static void insertSort(Comparable[] a) { // 将a[]按升序排列
int N = a.length;
for (int i = 1; i < N; i++) { // 将 a[i] 插入到 a[i-1]、a[i-2]、a[i-3]...之中
for (int j = i; j > 0 && less(a[j], a[j - 1]); j--)
exch(a, j, j - 1);
}
}
测试代码:
//生成随机字符串
int size = 40000;
String[] s = new String[size];
for (int i = 0; i < size; i++) {
s[i] = RandomStringUtils.randomAlphanumeric(10);
}
System.out.println("isSorted " + Smath.isSorted(s));
long startTime = System.currentTimeMillis();
//采用"插入排序"算法对数组进行排序
Smath.insertSort(s);
long doneTime = System.currentTimeMillis();
System.out.println("isSorted " + Smath.isSorted(s) + "\nestimate " + (doneTime - startTime) + " milliseconds");
测试结果:
isSorted false
isSorted true
estimate 3073 milliseconds