基本思想:先將整個待排序的記錄序列分割成爲若干子序列分別進行直接插入排序,待整個序列
中的記錄「基本有序」時,再對全體記錄進行依次直接插入排序。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; } }