落日楼头,断鸿声里,江南游子。把吴钩看了,栏杆拍遍,无人会,登临意。
——水龙吟·登建康赏心亭
希尔算法是希尔(D.L.Shell)于1959年提出的一种排序算法。是第一个时间复杂度突破O(n²)的算法之一。
其基础是插入排序。
上代码:
1 public class ShellSort { 2 3 public static void shellSort(int[] arr){ 4 5 int increment = arr.length; 6 int temp;//牌 7 int i; 8 int j; 9 do { 10 increment = increment/3 + 1;//增量 11 for (i = increment; i < arr.length; i++) { 12 if (arr[i] < arr[i - increment]) { 13 temp = arr[i]; 14 for (j = i - increment; j >= 0 && temp < arr[j]; j -= increment) { 15 arr[j] =arr[j]^arr[j + increment]; 16 arr[j + increment] =arr[j]^arr[j + increment]; 17 arr[j] =arr[j]^arr[j + increment]; 18 } 19 } 20 } 21 } while (increment > 1); 22 } 23 }
增量选取△k = 2^(t-k+1)-1 (0≤k≤t≤⌊log2(n+1)⌋)