希尔排序整理

算法原理

代码实现

 1 public static  void sort(int[] array){
 2         //数据间隔h 8>4>2>1
 3         int h = array.length / 2;
 4         while(h >= 1){
 5             for (int start = 0; start < h; start++) {
 6                 //对 start, start+h ,start+2h, start+nh 插排
 7                 //前后元素是-h和+h
 8                 for (int i = start + h; i < array.length; i += h) {
 9                     int tmp = array[i];
10                     int j;
11                     for (j = i; j - h >= 0 && tmp < array[j - h]; j -= h) {
12                         array[j] = array[j - h];
13                     }
14                     array[j] = tmp;
15                 }
16             }
17             h /= 2;
18         }
19         System.out.println("Arrays.toString(array) = " + Arrays.toString(array));
20     }

 

复杂度

希尔排序理论上时间复杂度是O(n^2),但实际上执行效率能跟O(nlogn)级别的算法媲美,不过当数据量增加时,还是会跟O(nlogn)产生差距。

希尔排序性能高的原因是:希尔排序每一轮排完,会让数据逐渐有序。

 

posted @ 2023-08-28 22:43  CodingOneTheWay  阅读(12)  评论(0编辑  收藏  举报
回到顶部