每天一點算法-希爾排序 (Day6)

介紹

今天介紹第二種插入排序——希爾排序彩匕,該方法因D.L.Shell于1959年提出而得名,是第一個時間復(fù)雜度突破O(n^2)的排序算法,又叫縮小增量排序痴脾,在待排序數(shù)據(jù)量越大,希爾排序直接插入排序的優(yōu)勢就越加明顯梳星,但也是前面介紹幾種算法中較難理解的一種赞赖。算法邏輯(升序為例):
初始時,有一個大小為 10 的無序序列:

1.在第一趟排序中冤灾,我們不妨設(shè) gap1 = N / 2 = 5前域,即相隔距離為 5 的元素組成一組,可以分為 5 組韵吨。
2.接下來匿垄,按照直接插入排序的方法對每個組進行排序。
在第二趟排序中归粉,我們把上次的 gap 縮小一半椿疗,即 gap2 = gap1 / 2 = 2 (取整數(shù))。這樣每相隔距離為 2 的元素組成一組糠悼,可以分為 2 組届榄。
3.按照直接插入排序的方法對每個組進行排序。
4.在第三趟排序中倔喂,再次把 gap 縮小一半痒蓬,即gap3 = gap2 / 2 = 1。 這樣相隔距離為 1 的元素組成一組滴劲,即只有一組攻晒。
5.按照直接插入排序的方法對每個組進行排序。此時班挖,排序已經(jīng)結(jié)束鲁捏。

希爾排序

例子

假設(shè)有一個待排序數(shù)組[77, 6, 37, 96, 34, 6, 14], js實現(xiàn)如下(升序):

function shellSort(arr) {
  var len = arr.length,
  temp,
  gap = 1;
  while(gap < len/5) { //動態(tài)定義間隔序列
    gap =gap*5+1;
  }
  for (gap; gap > 0; gap = Math.floor(gap/5)) {
    for (var i = gap; i < len; i++) {
      temp = arr[i];
      for (var j = i-gap; j >= 0 && arr[j] > temp; j-=gap) {
        arr[j+gap] = arr[j];
      }
      arr[j+gap] = temp;
    }
  }
  return arr;
}
sort([77, 6, 37, 96, 34, 6, 14]); // =>[6, 6, 14, 34, 37, 77, 96]

時間復(fù)雜度

時間復(fù)雜度為O(n^1.3)

感謝閱讀!歡迎關(guān)注给梅!持續(xù)更新中...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末假丧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子动羽,更是在濱河造成了極大的恐慌软舌,老刑警劉巖被饿,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡不跟,警方通過查閱死者的電腦和手機虏辫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門疤苹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赶舆,“玉大人,你說我怎么就攤上這事倦青∥痛玻” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵产镐,是天一觀的道長隘庄。 經(jīng)常有香客問我,道長癣亚,這世上最難降的妖魔是什么丑掺? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮逃糟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蓬豁。我一直安慰自己绰咽,他們只是感情好,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布地粪。 她就那樣靜靜地躺著取募,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蟆技。 梳的紋絲不亂的頭發(fā)上玩敏,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音质礼,去河邊找鬼旺聚。 笑死,一個胖子當著我的面吹牛眶蕉,可吹牛的內(nèi)容都是我干的砰粹。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼造挽,長吁一口氣:“原來是場噩夢啊……” “哼碱璃!你這毒婦竟也來了弄痹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤嵌器,失蹤者是張志新(化名)和其女友劉穎肛真,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體爽航,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡蚓让,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了岳掐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凭疮。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖串述,靈堂內(nèi)的尸體忽然破棺而出执解,到底是詐尸還是另有隱情,我是刑警寧澤纲酗,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布衰腌,位于F島的核電站,受9級特大地震影響觅赊,放射性物質(zhì)發(fā)生泄漏右蕊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一吮螺、第九天 我趴在偏房一處隱蔽的房頂上張望饶囚。 院中可真熱鬧,春花似錦鸠补、人聲如沸萝风。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽规惰。三九已至,卻和暖如春泉蝌,著一層夾襖步出監(jiān)牢的瞬間歇万,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工勋陪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留贪磺,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓诅愚,卻偏偏與公主長得像缘挽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

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

  • 概述 排序有內(nèi)部排序和外部排序壕曼,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序苏研,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    閑云清煙閱讀 758評論 0 6
  • 概述 排序有內(nèi)部排序和外部排序腮郊,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序摹蘑,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    蟻前閱讀 5,184評論 0 52
  • 人生有很多事情想不清楚看不透,抑郁煩惱过咬,痛苦不堪大渤。覺得,人一定要在懂事的年齡住回院掸绞,那是個生老病死的地方泵三,當你出院...
    蘭子說閱讀 413評論 0 4
  • 召喚不是遠古神諦 而來自醫(yī)者圣壇 鷺島悄然整理昔日美貌 輕輕抹去暴風(fēng)傷痕 奔赴神壇的千萬雙眼 早看慣了淚眼婆娑 風(fēng)...
    可有可無9527閱讀 209評論 0 0