码迷,mamicode.com
首页 > 编程语言 > 详细

希尔排序

时间:2018-05-10 21:44:21      阅读:420      评论:0      收藏:0      [点我收藏+]

标签:tty   注意   com   span   div   nbsp   执行   avg   element   

一、希尔排序

技术分享图片

定义增量序列 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 )

 

 

希尔排序

标签:tty   注意   com   span   div   nbsp   执行   avg   element   

原文地址:https://www.cnblogs.com/ch122633/p/9021588.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!