堆排序算法

學號:20021211189? ? ? ?姓名:趙治偉

【嵌牛導讀】堆排序(Heapsort)是利用二叉堆的概念來排序的選擇排序算法卖宠,分為兩種:

升序排序:利用最大堆進行排序

降序排序:利用最小堆進行排序

【嵌牛鼻子】堆排序算法

【嵌牛正文】

1.算法原理

給定一個最大堆如下圖所示,以該最大堆進行演示堆排序

首先筷畦,刪除堆頂元素10(即最大的元素)刺洒,并將最后的元素3補充到堆頂,刪除的元素10逆航,放置于原來最后的元素3的位置

根據二叉堆的自我調整,第二大的元素9會成為二叉堆新的堆頂

刪除元素9拇惋,元素8成為最大堆堆頂

刪除元素8女揭,元素7成為最大堆堆頂

依次刪除最大元素,直至所有元素全部刪除

此時磷仰,被刪除的元素組成了一個從小到大排序的序列

2.算法實現(xiàn)

// 下沉調整

// 最大堆

function downAdjust(arr, parentIndex, length) {

? ? // 緩存父節(jié)點的值灶平,用于最后進行賦值,而不需要每一步進行交換

? ? let temp = arr[parentIndex];

? ? // 孩子節(jié)點下標逢享,暫時定為左孩子節(jié)點下標

? ? let childIndex = 2 * parentIndex + 1;

? ? while (childIndex < length) {

? ? ? ? // 當存在右孩子節(jié)點,且右孩子節(jié)點的值小于左孩子節(jié)點的值瞒爬,childIndex記錄為右孩子節(jié)點的下標

? ? ? ? // childIndex實際記錄的是最小的孩子節(jié)點的下標

? ? ? ? if (childIndex + 1 < length && arr[childIndex + 1] > arr[childIndex]) {

? ? ? ? ? ? childIndex++;

? ? ? ? }

? ? ? ? // 如果父節(jié)點的值比孩子節(jié)點的值都小,則調整結束

? ? ? ? if (temp >= arr[childIndex]) {

? ? ? ? ? ? break;

? ? ? ? }

? ? ? ? // 將最小的孩子節(jié)點的值賦值給父節(jié)點

? ? ? ? arr[parentIndex] = arr[childIndex];

? ? ? ? parentIndex = childIndex;

? ? ? ? childIndex = 2 * parentIndex + 1;

? ? }

? ? arr[parentIndex] = temp;

}

// 堆排序

function sort(arr) {

? ? // 把無序數(shù)組構建成二叉堆

? ? for (let i = parseInt(arr.length / 2) - 1; i >= 0; i--) {

? ? ? ? downAdjust(arr, i, arr.length);

? ? }

? ? console.log(arr);

? ? // 循環(huán)刪除堆頂元素矢空,移到集合尾部,調節(jié)堆產生新的堆頂

? ? for (let i = arr.length - 1; i > 0; i--) {

? ? ? ? // 最后一個元素與第一個元素交換

? ? ? ? [arr[0], arr[i]] = [arr[i], arr[0]];

? ? ? ? downAdjust(arr, 0, i);

? ? }

}

let arr = [10, 9, 8, 5, 6, 7, 1, 4, 2, 3];

sort(arr);

console.log(arr);

堆排序算法特點

1.時間復雜度

下沉調整的時間復雜度等同于堆的高度O(logn)屁药,構建二叉堆執(zhí)行下沉調整次數(shù)是n/2柏锄,循環(huán)刪除進行下沉調整次數(shù)是n-1,時間復雜度約為O(nlogn)

2.空間復雜度

堆排序算法排序過程中需要一個臨時變量進行兩兩交換趾娃,所需要的額外空間為1,因此空間復雜度為O(1)

3.穩(wěn)定性

堆排序算法在排序過程中茫舶,相同元素的前后順序有可能發(fā)生改變,所以堆排序是一種不穩(wěn)定排序算法

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末讥耗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子古程,更是在濱河造成了極大的恐慌喊崖,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荤懂,死亡現(xiàn)場離奇詭異,居然都是意外死亡节仿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門矾瘾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人壕翩,你說我怎么就攤上這事》怕瑁” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵大猛,是天一觀的道長。 經常有香客問我挽绩,道長驾中,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任唠亚,我火速辦了婚禮,結果婚禮上灶搜,老公的妹妹穿的比我還像新娘。我一直安慰自己割卖,他們只是感情好,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布鹏溯。 她就那樣靜靜地躺著淹仑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪匀借。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天吓肋,我揣著相機與錄音,去河邊找鬼蓬坡。 笑死,一個胖子當著我的面吹牛屑咳,可吹牛的內容都是我干的。 我是一名探鬼主播兆龙,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼敲董,長吁一口氣:“原來是場噩夢啊……” “哼腋寨!你這毒婦竟也來了?” 一聲冷哼從身側響起化焕,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎查刻,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體穗泵,經...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡谜疤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了夷磕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡榆浓,死狀恐怖,靈堂內的尸體忽然破棺而出陡鹃,到底是詐尸還是另有隱情,我是刑警寧澤萍鲸,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站脊阴,受9級特大地震影響,放射性物質發(fā)生泄漏嘿期。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一备徐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蜜猾,春花似錦秀菱、人聲如沸蹭睡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至清钥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間循捺,已是汗流浹背雄人。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留恰力,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓踩萎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親香府。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內容

  • 堆排序 堆排序是利用堆這種數(shù)據結構而設計的一種排序算法企孩,堆排序是一種選擇排序袁稽,它的最壞,最好推汽,平均時間復雜度均為O...
    安然若知閱讀 1,388評論 0 0
  • 堆排序基本介紹 堆排序是利用堆這種數(shù)據結構而設計的一種排序算法,堆排序是一種選擇排序歹撒,它的最壞,最好栈妆,平均時間復雜...
    先生zeng閱讀 500評論 0 6
  • 無論走到哪里厢钧,都應該記住,過去都是假的早直,回憶是一條沒有盡頭的路,一切以往的春天都不復存在市框,就連那最堅韌而又狂亂的愛...
    BeautifulSoulpy閱讀 577評論 0 1
  • 啊噢,又開始寫算法學習的筆記了喻圃。最近在準備面試的過程中又把這些常見的排序算法拿出來復習復習,既然這篇寫到了堆排序粪滤,...
    Originalee閱讀 139評論 0 0
  • 啊噢,又開始寫算法學習的筆記了杖小。最近在準備面試的過程中又把這些常見的排序算法拿出來復習復習,既然這篇寫到了堆排序予权,...
    Originalee閱讀 385評論 0 0