- 基本思想:让数组越来越有序
- 不能只处理相邻的逆序对
- 有些嵌入式机器不支持递归或者递归要消耗的性能非常大,就可以使用希尔排序。


private static <E extends Comparable<E>> void sort(E[] data) { int h = data.length / 2; while (h >= 1) { // 遍历每一个子数组,每一个子数组第一个元素的位置为0到h-1 for (int start = 0; start < h; start++) { for (int i = start + h; i < data.length; i += h) { E t = data[i]; int j; // j-h 前一个元素的位置 for (j = i; j - h >= 0 && t.compareTo(data[j - h]) < 0; j -= h) { data[j] = data[j - h]; } data[j] = t; } } h = h / 2; } }

private static <E extends Comparable<E>> void sort2(E[] data) { int h = data.length / 2; while (h >= 1) { for (int i = h; i < data.length; i++) { E t = data[i]; int j; // j-h 前一个元素的位置 for (j = i; j - h >= 0 && t.compareTo(data[j - h]) < 0; j -= h) { data[j] = data[j - h]; } data[j] = t; } h = h / 2; } }