關於希爾排序的整理

     今天在牛客網刷筆試題,看到了一題關於希爾排序的,之前上數據結構課也沒有講過,現在也只能說知道那道題怎麼做了。

     先上題目。對序列{15,9,7,8,20,-1,4}進行排序,進行一趟後數據的排列變爲{4,9,-1,8,20,7,15};則採用的是()排序:A.選擇  B.快速  C.希爾  D.起泡    答案:C

     百度了一下希爾排序,有這樣一個例子:


這個例子講到了個Gap,第一組是10/2=5,第二組是5/2=2,第三組是2/2=1.第二組確實是每隔2個一組,但第一組就說不過去了。雖然是可以解釋這個結果怎麼來的了,但還是不能說理解了。還有這麼一個解釋:

對待排記錄序列先作“宏觀”調整,再作“微觀”調整。所謂“宏觀”調整,指的是“跳躍式”的插入排序。即:將記錄序列分成若干子序列,每個子序列分別進行插入排序。關鍵是這種子序列不是由相鄰的記錄構成的。
假設將 n 個記錄分成 d 個子序列,則這 d 個子序列分別爲:{ R[1],R[1+d],R[1+2d],…,R[1+kd] } { R[2],R[2+d],R[2+2d],…,R[2+kd] } … { R[d],R[2d],R[3d],…,R[kd],R[(k+1)d] } 其中,d 稱爲增量,它的值在排序過程中從大到小逐漸縮小,直至最後一趟排序減爲 1。

仿照這個例子,我們來看一下前面的題目。


即是進行了一次希爾排序。所以前面提到的那個Gap,第一次的間隔應該爲n/2 - 1,後面的均爲n/2,一直做到n/2=0,排序就結束了,這就是所謂的希爾排序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章