Java学习笔记——排序算法之希尔排序(Shell Sort)

 

落日楼头,断鸿声里,江南游子。把吴钩看了,栏杆拍遍,无人会,登临意。

                                 ——水龙吟·登建康赏心亭

 

希尔算法是希尔(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)⌋)

posted @ 2017-05-12 17:36  Tomas曼  Views(267)  Comments(0Edit  收藏  举报