• 希尔排序


    一、希尔排序

    定义增量序列 DM > DM-1 > … > D1 = 1

    对每个 Dk 进行Dk-间隔排序( k = M, M-1, … 1 )

    注意: Dk-间隔有序的序列,在执行Dk-1-间隔排序后,仍然是Dk-间隔有序的

     

    希尔增量序列

    原始希尔排序 DM = [ N / 2 ] , Dk = [ Dk+1 / 2 ]

    void Shell_sort(ElementType A[], int N)
    {
        for(D=N/2;D>0;D/=2) {    /* 希尔增量序列 */
            for(P=D;P<N;P++) {     /* 插入排序 */
                Tmp = A[P];
                for(i=P;i>=D && A[i-D]>Tmp;i-=D)
                    A[i] = A[i-D];
                A[i] = Tmp;
            }
        }
    }

    最坏的情况:T = O(N2)

    增量元素不互质,则小增量可能根本不起作用

     

    二、更多增量序列

    Hibbard增量序列

    • Dk = 2k – 1 — 相邻元素互质
    • 最坏情况: T = O( N3/2 )
    • 猜想: Tavg = O ( N5/4 )

    Sedgewick增量序列

    • {1, 5, 19, 41, 109, … }  — 9x4i – 9x2i + 1 4i – 3x2i + 1
    • 猜想: Tavg = O ( N7/6 )Tworst = O ( N4/3 )

     

    无欲速,无见小利。欲速,则不达;见小利,则大事不成。
  • 相关阅读:
    强大的异或运算-深度好文
    40-3Sum Closest
    39-Remove Duplicates from Sorted Array
    谈谈AI
    38- Majority Element
    37-Invert Binary Tree
    36-Same Tree
    35-Remove Element
    34. Swap Nodes in Pairs
    33. Implement strStr()
  • 原文地址:https://www.cnblogs.com/ch122633/p/9021588.html
Copyright © 2020-2023  润新知