基本思想:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列
中的记录“基本有序”时,再对全体记录进行依次直接插入排序。java
public class HillSortTest { public static void main(String[] args) { int[] array = {1, 2, 5, 41, 7, 11, 13, 17, 59, 19, 23, 29, 31, 37, 43, 47, 53}; int[] hillSortArrays = hillSort(array); for (int s : hillSortArrays) { System.out.print(s + " "); } } /** * 希尔排序 * * @param arrays 要排序的数组 * @return 排序后的数组 */ private static int[] hillSort(int[] arrays) { int temp; //默认步长为数组长度除以2 int step = arrays.length; do { //每次的step都是前一次的一半 step = step / 2; //肯定分组数 for (int i = 0; i < step; i++) { //对分组数据进行直接插入排序 for (int j = i + step; j < arrays.length; j = j + step) { temp = arrays[j]; int k; for (k = j - step; k >= 0; k = k - step) { //step 步数先后数据对比并交换 if (arrays[k] > temp) { arrays[k + step] = arrays[k]; } else { break; } } arrays[k + step] = temp; } } } while (step != 1); return arrays; } }