[4] 演算法之路 - 插入排序之Shell間隔與Sedgewick間隔

來源:互聯網
上載者:User

標籤:shell排序   演算法   

題目

插入排序法由未排序的後半部前端取出一個值,插入已排序前半部的適當位置,概念簡單但速度不快。

 排序要加快的基本原則之一:

是讓後一次的排序進行時,盡量利用前一次排序後的結果,以加快排序的速度,Shell排序法即是基於此一概念來改良插入排序法。

解法

Shell排序法最初是D.L Shell於1959所提出,假設要排序的元素有n個,則每次進行插入排序時並不是所有的元素同時進行時,而是取一段間隔。

 

Shell排序演算法 – n/2間隔

Shell首先將間隔設定為n/2,然後跳躍進行插入排序,再來將間隔n/4,跳躍進行排序動作,再來間隔設定為n/8、n/16,直到間隔為1之後的最後一次排序終止。


Shell排序演算法 – Sedgewick間隔

 

將間隔設定為n / 2是D.L Shell最初所提出,在教科書中使用這個間隔比較好說明,然而Shell排序法的關鍵在於間隔的選定,例如Sedgewick證明選用以下的間隔可以加 快Shell排序法的速度:


e.g 對於一個長度為10000的整型數組,

Swedge[0]=10000, Swedge[1]=2537, Swedge[2]=653, Swedge[4]=48,Swedge[5]=15…Swedge[8]=1

採用Swedge間隔需要迭代8次 (Swedge[0] 不使用)

而用普通Shell間隔需要迭代13次

Comsh [0]=10000, Comsh [1]=5000, Comshe[2]=2500, Comsh[4]=625,…..Comshell[8]=39, Comshell[13]=1


後來還有人證明有其它的間隔選定法可以將Shell排序法的速度再加快;另外Shell排序法的概念也可以用來改良氣泡排序法。


SourceCodes


n/2間隔與Sedgewick間隔的 Shell排序


int DLShellSort(int a[],int lens){for(int gap=lens/2;gap>0;gap/=2){InsertionSortWithGap(a,lens,gap);}return 0;}// 4*((2^j)^2)+3*(2^j)+1<=n// j= log(((-3+sqrt(16*lens-7.0))/8))/log(2.0)int SedgewickShellSort(int a[],int lens){int sdwindex= (int)log(((-3+sqrt(16*lens-7.0))/8))/log(2.0);int sdwpr=(int)pow(2,(double)sdwindex);int sdwpr2=sdwpr/2;while(true){int sdwgap=4*sdwpr2*sdwpr2+3*sdwpr2+1;InsertionSortWithGap(a,lens,sdwgap);sdwpr2/=2;if(sdwpr2<=1)break;}return 0;}


見 [3] 演算法之路 - 插入排序
// 插入排序 使用指定間隔的int InsertionSortWithGap(int a[],int lens,int gap){int k,tmp;// 控制插入層for(int m=0;m<gap;m++){for(int i=gap+m;i<lens;i+=gap){int j=i-gap;tmp=a[i];for(k=j;k>=0;k-=gap){if(tmp<a[k]) a[k+gap]=a[k];else break;}if(i!=(k+gap))a[k+gap]=tmp;}}return 0;}




相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.