1 package test;
2
3 /*
4 * 希尔排序的时间复杂度与增量(即,步长gap)的选取有关。
5 * 例如,当增量为1时,希尔排序退化成了直接插入排序,
6 * 此时的时间复杂度为O(N²),而Hibbard增量的希尔排序的时间复杂度为O(N^(3/2))
7 * 不稳定
8 * 思想是使数组中任意间隔为h的元素都是有序的
9 */
10 public class ShellSort {
11 public static void sort(int[] a) {
12 int N = a.length;
13 int h = 1;
14 while(h<N/3)
15 h = 3*h + 1;
16 while(h>=1){
17 for(int i=h;i<N;i++) {
18 for(int j=i;j>=h && (a[j]<a[j-h]);j-=h) {
19 int temp = a[j];
20 a[j] = a[j-h];
21 a[j-h] = temp;
22 }
23 }
24 h = h/3;
25 }
26 }
27 public static void main(String[] args) {
28 int[] a = new int[100];
29 for(int i=0;i<a.length;i++) {
30 a[i] = (int)(Math.random()*100);
31 }
32 sort(a);
33 int n = 0;
34 for(int i:a) {
35 System.out.print(i+" ");
36 n++;
37 if(n==20) {
38 n = 0;
39 System.out.println();
40 }
41
42 }
43 }
44 }