希爾排序

希爾排序(Shell Sort)是插入排序的一種剧防。也稱縮小增量排序帖族,是直接插入排序算法的一種更高效的改進(jìn)版本范舀。希爾排序是非穩(wěn)定排序算法爹凹。該方法因DL.Shell于1959年提出而得名南誊。 希爾排序是把記錄按下標(biāo)的一定增量分組身诺,對(duì)每組使用直接插入排序算法排序;隨著增量逐漸減少抄囚,每組包含的關(guān)鍵詞越來(lái)越多霉赡,當(dāng)增量減至1時(shí),整個(gè)文件恰被分成一組幔托,算法便終止穴亏。

希爾排序過(guò)程

希爾排序的基本思想是:將數(shù)組列在一個(gè)表中并對(duì)列分別進(jìn)行插入排序,重復(fù)這過(guò)程重挑,不過(guò)每次用更長(zhǎng)的列(步長(zhǎng)更長(zhǎng)了嗓化,列數(shù)更少了)來(lái)進(jìn)行。最后整個(gè)表就只有一列了谬哀。將數(shù)組轉(zhuǎn)換至表是為了更好地理解這算法刺覆,算法本身還是使用數(shù)組進(jìn)行排序。

例如史煎,假設(shè)有這樣一組數(shù)[ 13 14 94 33 82 25 59 94 65 23 45 27 73 25 39 10 ]谦屑,如果我們以步長(zhǎng)為5開(kāi)始進(jìn)行排序,我們可以通過(guò)將這列表放在有5列的表中來(lái)更好地描述算法篇梭,這樣他們就應(yīng)該看起來(lái)是這樣(豎著的元素是步長(zhǎng)組成):
13 14 94 33 82
25 59 94 65 23
45 27 73 25 39
10
然后我們對(duì)每列進(jìn)行排序:
10 14 73 25 23
13 27 94 33 39
25 59 94 65 82
45
將上述四行數(shù)字氢橙,依序接在一起時(shí)我們得到:[ 10 14 73 25 23 13 27 94 33 39 25 59 94 65 82 45 ]。這時(shí)10已經(jīng)移至正確位置了恬偷,然后再以3為步長(zhǎng)進(jìn)行排序:
10 14 73
25 23 13
27 94 33
39 25 59
94 65 82
45
排序之后變?yōu)椋?br> 10 14 13
25 23 33
27 25 59
39 65 73
45 94 82
94
最后以1步長(zhǎng)進(jìn)行排序(此時(shí)就是簡(jiǎn)單的插入排序了)

希爾排序的分析

shellsort.png
def shell_sort(alist):
    n = len(alist)
    # 初始步長(zhǎng)
    gap = n / 2
    while gap > 0:
        # 按步長(zhǎng)進(jìn)行插入排序
        for i in range(gap, n):
            j = i
            # 插入排序
            while j>=gap and alist[j-gap] > alist[j]:
                alist[j-gap], alist[j] = alist[j], alist[j-gap]
                j -= gap
        # 得到新的步長(zhǎng)
        gap = gap / 2

alist = [54,26,93,17,77,31,44,55,20]
shell_sort(alist)
print(alist)

時(shí)間復(fù)雜度

最優(yōu)時(shí)間復(fù)雜度:根據(jù)步長(zhǎng)序列的不同而不同
最壞時(shí)間復(fù)雜度:O(n2)
穩(wěn)定想:不穩(wěn)定

希爾排序演示

shellsort.gif
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末充蓝,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子喉磁,更是在濱河造成了極大的恐慌谓苟,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件协怒,死亡現(xiàn)場(chǎng)離奇詭異涝焙,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)孕暇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén)仑撞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)赤兴,“玉大人,你說(shuō)我怎么就攤上這事隧哮⊥傲迹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵沮翔,是天一觀的道長(zhǎng)陨帆。 經(jīng)常有香客問(wèn)我,道長(zhǎng)采蚀,這世上最難降的妖魔是什么疲牵? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮榆鼠,結(jié)果婚禮上纲爸,老公的妹妹穿的比我還像新娘。我一直安慰自己妆够,他們只是感情好识啦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著神妹,像睡著了一般颓哮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上灾螃,一...
    開(kāi)封第一講書(shū)人閱讀 51,775評(píng)論 1 307
  • 那天题翻,我揣著相機(jī)與錄音,去河邊找鬼腰鬼。 笑死嵌赠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的熄赡。 我是一名探鬼主播姜挺,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼彼硫!你這毒婦竟也來(lái)了炊豪?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拧篮,失蹤者是張志新(化名)和其女友劉穎词渤,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體串绩,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缺虐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了礁凡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片高氮。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡慧妄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出剪芍,到底是詐尸還是另有隱情塞淹,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布罪裹,位于F島的核電站饱普,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏坊谁。R本人自食惡果不足惜费彼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一滑臊、第九天 我趴在偏房一處隱蔽的房頂上張望口芍。 院中可真熱鬧,春花似錦雇卷、人聲如沸鬓椭。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)小染。三九已至,卻和暖如春贮折,著一層夾襖步出監(jiān)牢的瞬間裤翩,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工调榄, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留踊赠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓每庆,卻偏偏與公主長(zhǎng)得像筐带,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子缤灵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

推薦閱讀更多精彩內(nèi)容