排序算法之希尔排序

Posted yzl12666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法之希尔排序相关的知识,希望对你有一定的参考价值。

希尔排序是一种基于插入排序的快速排序算法,对于大规模乱序数组插入排序很慢,因为它只会交换相邻的元素,因此元素只能一点一点的从数组的一端移动到另一端。例如,如果主键最小的元素正好在数组的尽头,要讲它挪到正确的位置就需要N-1次移动。希尔排序为了加快速度简单的改进了插入排序,交换不相邻的元素以对数组的局部进行排序,并最终用插入排序将局部有序的数组排序。

希尔排序更有效的原因是它权衡了子数组的规模和有序性。排序之初,各个子数组都很短,排序之后子数组都是部分有序的,这两种情况都很适合插入排序。

下面是希尔排序的java实现。

 1 public class Shell {
 2     public static void sort(int[] a)
 3     {
 4         int N = a.length;
 5         int h = 1;
 6         while (h < N/3) h = h*3+1;
 7         while (h >= 1)
 8         {
 9             for (int i = h; i < N; i++)
10             {
11                 for (int j = i; j >= h && a[j] < a[j-h]; j -= h)
12                 {
13                     int temp = a[j];
14                     a[j] = a[j-1];
15                     a[j-1] = temp;
16                 }
17             }
18             h = h / 3;
19         }
20     }
21 }

 

以上是关于排序算法之希尔排序的主要内容,如果未能解决你的问题,请参考以下文章

图解排序算法之希尔排序

图解排序算法之希尔排序

图解排序算法之希尔排序

排序算法入门之希尔排序(java实现)

重温基础算法内部排序之希尔排序法

算法之希尔排序快速排序二分查找