希爾排序(Shell Sort)是最早突破復(fù)雜度O(n^2)的排序算法 算法引入 希爾排序(Shell Sort)是Shell提出來(lái)的,對(duì)插入排序法的改進(jìn),也是最早突破復(fù)雜度O(n2)的排序算法。 插入排序法有2個(gè)特點(diǎn):
希爾排序提供了一個(gè)辦法,可以直接比較交換間隔較遠(yuǎn)的數(shù)據(jù) h-sort 希爾排序的關(guān)鍵思想是先用間隔較遠(yuǎn)的數(shù)據(jù)相互排序,這樣有機(jī)會(huì)把位置很偏的數(shù)據(jù)迅速安放到正確的位置。首先我們介紹一個(gè)新概念:h-sort 如果一個(gè)序列中任何一個(gè)間隔為h的子序列都是排好序的,那么這個(gè)序列叫做h-sorted 答案: 原序列有5個(gè)間隔為5的子序列:
如果上述5個(gè)子序列都排好序,那么原來(lái)都序列就變成了5-sorted.
想一想:
再想一想: 希爾排序 我們定義一個(gè)從大到小的數(shù)列叫做步長(zhǎng)序列, 只要最終步長(zhǎng)為 1 任何步長(zhǎng)串行都可以使用。希爾排序就是用步長(zhǎng)序列定義的步長(zhǎng)對(duì)數(shù)組用插入排序法反復(fù)排序?qū)^(guò)程。
算法實(shí)現(xiàn) 為什么循環(huán)從i=gap開(kāi)始?, 因?yàn)槲覀儗?duì)所以子序列用插入排序法進(jìn)行排序;而在插入排序法中,第一個(gè)元素可以看做已經(jīng)排好序的,這里有g(shù)ap個(gè)子序列,所以前面一共有g(shù)ap個(gè)排好序的元素。 學(xué)而時(shí)嘻之,不亦樂(lè)乎~, 來(lái)做個(gè)填充練習(xí): 算法復(fù)雜度 希爾排序是按照不同步長(zhǎng)對(duì)元素進(jìn)行插入排序,當(dāng)剛開(kāi)始元素很無(wú)序的時(shí)候,步長(zhǎng)最大,所以插入排序的元素個(gè)數(shù)很少,速度很快;當(dāng)元素基本有序了,步長(zhǎng)很小,插入排序?qū)τ谟行虻男蛄行屎芨?。所以,希爾排序的時(shí)間復(fù)雜度會(huì)比o(n^2)好一些。 |
|
來(lái)自: 長(zhǎng)沙7喜 > 《信息課》