算法-排序-希爾排序

由來

? ??希爾排序是根據(jù)插入排序來實現(xiàn)的突诬。

????希爾排序根據(jù)插入排序的以下兩點性質(zhì)而提出的改進方法:

? ??????1.插入排序在對幾乎已經(jīng)順序排列的數(shù)據(jù)操作時念链,效率高盟步,即可以達到線性排序的效率征椒;

? ??????2.插入排序一般說來是低效的瑟捣。因為插入排序每次數(shù)據(jù)只能移動一位割疾。

? ??希爾排序算法利用了插入排序的簡單嚎卫,同時又避免了插入排序每次交換數(shù)據(jù)只能消除一個逆序的缺點。所以希爾排序一般不是交換相鄰的元素宏榕,而是跳躍一段距離進行交換拓诸。

原理

? ??希爾排序通過將整個待排序元素序列分成若干個子序列(由相隔某個“增量”的元素組成)分別直接進行插入排序。然后依次縮減增量再次進行排序麻昼,待整個序列中的元素基本有序奠支,即增量足夠小時,再對全體進行元素進行一次直接插入排序抚芦。因為最后一次插入排序是基于有序序列的插入排序倍谜,效率是很高的。因此希爾排序在時間上是優(yōu)于直接插入排序的叉抡。

步長序列

? ??步長序列是希爾排序的核心部分尔崔。只要最終步長為1,任何步長序列都可以工作褥民。算法最開始以一定的步長進行排序季春。初次排序完畢之后,再次根據(jù)既定步長進行排序消返。最終算法是以步長為1進行排序耘拇。當(dāng)步長為1的時候宇攻,算法演變?yōu)椴迦肱判颉?/p>

算法效率

? ??最優(yōu)時間為O(n)尺碰,不穩(wěn)定

javaScript

let arr1 = [2, 34, 12, 67, 46, 5, 10]

function shellSort(arr){

? let reArr = []

? if(Array.isArray(arr) && arr.length > 0){

? ? reArr = reArr.concat(arr)

? ? let h = 1 // 保存可變增量

? ? while(h <= reArr.length / 3){

? ? ? h = h * 3 + 1 // 得到增量序列的最大值

? ? }

? ? while(h > 0){

? ? ? console.log('h ===>', h)

? ? ? for(let i = h; i < reArr.length; i++){

? ? ? ? let current = reArr[i]

? ? ? ? if(current < reArr[i-h]){

? ? ? ? ? let j = i - h

? ? ? ? ? // 整體后移

? ? ? ? ? for(; j>0 && reArr[j] > current; j -= h){

? ? ? ? ? ? reArr[j+h] = reArr[j]

? ? ? ? ? }

? ? ? ? ? reArr[j+h] = current

? ? ? ? }

? ? ? ? console.log('reArr===>', reArr)

? ? ? }

? ? ? h = (h - 1) / 3

? ? }

? }

? return reArr

}

console.log('ARR ==>', shellSort(arr1))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末题篷,一起剝皮案震驚了整個濱河市番枚,隨后出現(xiàn)的幾起案子葫笼,更是在濱河造成了極大的恐慌路星,老刑警劉巖洋丐,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件堤尾,死亡現(xiàn)場離奇詭異郭宝,居然都是意外死亡剩蟀,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門犬缨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怀薛,“玉大人,你說我怎么就攤上這事焚碌∈纾” “怎么了鹃骂?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長象踊。 經(jīng)常有香客問我棚壁,道長,這世上最難降的妖魔是什么曼验? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮豺裆,結(jié)果婚禮上躺酒,老公的妹妹穿的比我還像新娘。我一直安慰自己园匹,他們只是感情好裸违,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著紊馏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赫编。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天境氢,我揣著相機與錄音,去河邊找鬼此衅。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的炕柔。 我是一名探鬼主播酌泰,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼匕累!你這毒婦竟也來了陵刹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤欢嘿,失蹤者是張志新(化名)和其女友劉穎衰琐,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炼蹦,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡羡宙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了掐隐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狗热。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖虑省,靈堂內(nèi)的尸體忽然破棺而出匿刮,到底是詐尸還是另有隱情,我是刑警寧澤探颈,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布熟丸,位于F島的核電站,受9級特大地震影響伪节,放射性物質(zhì)發(fā)生泄漏光羞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一怀大、第九天 我趴在偏房一處隱蔽的房頂上張望纱兑。 院中可真熱鬧,春花似錦化借、人聲如沸萍启。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至局服,卻和暖如春钓瞭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背淫奔。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工山涡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓鸭丛,卻偏偏與公主長得像竞穷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鳞溉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

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