美文网首页
8.希尔排序

8.希尔排序

作者: 村上果树 | 来源:发表于2018-02-26 20:50 被阅读0次

推荐视频https://www.bilibili.com/video/av17004970/?from=search&seid=17055254545953111032
非常形象的演示了希尔排序的过程.
希尔排序尝试与之前h个元素进行比较,这样通过将h从一个很大的值逐渐缩小到1,一步步将一个无序数组变成有序性更强的数组。

参考zju-mooc-数据结构


图中的注意是说,比如经过3间隔排序后的数组 依然满足5间隔有序,同理经过1间隔排序后的数组依然是满足3间隔有序的。



这个例子是说8间隔有序的话,那么4,2都可能有序,那么进行8,4,2间隔的排序就是一种浪费.

void shellSort(T arr[], int n){
    //根据给定的数组大小n来计算对应递增序列中的最大值
    int h = 1;
    while( h < n/3 )
        h = h * 3 + 1;
    /*
    *   其实在这里我觉得应该添加这样一段代码:
    *   if(n == h)
    *       h /= 3;
    *   因为当n等于h的话,进入下面的循环后 for( int i = h; i < n; i++ ) 会退出
    *   不过知道就行了,实际上对性能没什么影响
    */
    // 计算 increment sequence: 1, 4, 13, 40, 121, 364, 1093...
    while( h >= 1 ){
        for( int i = h; i < n; i++ ){
            // 对 arr[i], arr[i-h], arr[i-2*h], arr[i-3*h]... 使用插入排序
            T e = arr[i];
            int j;
            for(j = i; j >= h && e < arr[j-h]; j -= h)
                arr[j] = arr[j-h];
            arr[j] = e;
        }
        h /= 3;
    }
}

其他与前次代码相同,测试结果为:



希尔排序非常高效.

希尔排序时间复杂度的分析是比较难的,我们选取不同的让h递减的序列,它的复杂度也是不同的.
increment sequence: 1, 4, 13, 40, 121, 364, 1093...使用这个序列 时间复杂度为O(n^3/2)
希尔排序的时间复杂度比O(n^2)要低,但比O(nlogn)要高一些,不过它的实现比较简单.
不过对于排序算法来讲它的最优时间复杂度是O(nlogn)这个级别的.

相关文章

  • 8.希尔排序

    推荐视频https://www.bilibili.com/video/av17004970/?from=searc...

  • 排序问题

    1.冒泡排序 2.快速排序 3.选择排序 4.插入排序 5.希尔排序 6.桶排序 7.归并排序 8.堆排序 1.冒...

  • Java八大排序简述

    1.冒泡排序 改进版: 2.选择排序 3.插入排序 4.希尔排序 5.快速排序 6.堆排序 7.归并排序 8.基数...

  • 排序算法

    1.冒泡排序2.选择排序3.插入排序4.快速排序5.堆排序6.希尔排序7.归并排序8.计数排序9.桶排序10.基数...

  • 常用排序算法 - Objective-C

    常用排序 1.冒泡排序2.选择排序3.快速排序4.插入排序5.希尔排序6.归并排序7.堆排序8.桶排序 1.冒泡排...

  • 8 种排序算法与 Java 代码实现

    1.直接插入排序 2.希尔排序 3.简单选择排序 4.堆排序 5.冒泡排序 6.快速排序 7.归并排序 8.基数排...

  • iOS - 排序算法

    1.冒泡排序 2.选择排序 3.桶排序 4.插入排序 5.希尔排序 6.堆排序 7.快速排序 8.归并排序 9.二分法

  • 排序算法(二)之希尔排序

    图解排序算法(二)之希尔排序 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也...

  • 07-希尔排序(Shell Sort)

    希尔排序(Shell Sort) 希尔排序是唐纳德·希尔(Donald Shell)在0959年提出的。希尔排序与...

  • 排序-希尔排序(分治)

    希尔排序 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。 希尔排序...

网友评论

      本文标题:8.希尔排序

      本文链接:https://www.haomeiwen.com/subject/drnexftx.html