package sort.insert;
public class Insertion {
public static void sort(Comparable[] a) {
for (int i = 1; i < a.length; i++) {
for (int j = i; j > 0; j--) {
//如果j-1处的值比j处的值大,就交换,否则跳出循环
if (greater(a[j-1], a[j])) {
exch(a, j-1, j);
} else {
break;
}
}
}
}
//比较元素v和w的大小
private static boolean greater(Comparable v, Comparable w) {
return v.compareTo(w) > 0;
}
//调换v和w的索引
private static void exch(Comparable[] a, int i, int j) {
Comparable temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
插入排序使用双层for循环,其中内层循环的代码是真正完成排序的代码。
插入排序的时间复杂度是O(N^2)