排序-希尔排序

 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 }

 

posted @ 2018-09-27 00:13  damon11  阅读(115)  评论(0)    收藏  举报