為什麼堆排序演算法不適合用鏈式儲存結構?

時間 2021-10-21 19:57:51

1樓:起風了

堆排序所需要的資料結構二叉堆(最大堆/最小堆)本質上是一顆完全二叉樹,完全二叉樹適合採用順序儲存結構(陣列),因為,同時又可以最大限度的節省儲存空間,而鏈式儲存在儲存完全二叉樹時反而不合適了,因為反映邏輯關係的指標實際上浪費了大量儲存空間(相比較陣列儲存完全二叉樹來說),而對於普通的二叉樹,陣列索引不再能夠直接的反映節點間的邏輯關係,此時指標的優勢便顯現出來了

因此,採用陣列儲存是根據完全二叉樹的特點所決定的

2樓:NaN

姥姥答案的精簡版:

因為堆排序需要兩步,第一步「建立堆」,也就是從最後乙個父結點依次向上進行heapify的過程,需要random access。

所以在具有random access的資料結構上,堆排序是n+nlogn,在不具有random access的資料結構上,建立堆不可行,所以只能採用插入,因此堆排序是nlogn+nlogn。

// 再加一點:堆排序本來locality就不怎麼好,在鏈式儲存上locality就更差了

3樓:悽臨雨

堆需要乙個二維結構。陣列可以作為二維結構(每層不定長的二維陣列)。

用鏈,你需要兩個鏈形成二維。

一維鏈做不了堆儲存(會很慢)

4樓:最愛Amicus

修改一下這個問題,其實題主理解是沒錯的,鍊錶的確能作為堆排序的儲存方式。

此時鍊錶結構的基礎上有樹形結構,只是簡單問題複雜化了。可能題設表示的是不加修飾的鍊錶結構。

我忘了具體實現,不過堆排序演算法中,將根節點與最後乙個節點換掉,再將新根節點downheap下潛這個操作中,由於最後乙個節點的位置是在變的,此時使用非順序儲存應該是難以找到的。。

5樓:血小板自動機

你可以這樣想,如果不用順序儲存結構:

你如何能快速找到第 i 個結點呢?找到了最後乙個結點並與根節點交換後,如何在從下往上 update 的過程中快速找到 i 結點的父結點呢?

這兩個過程都是很困難的,就算增加額外資訊,找父結點變容易了,但仍然很難找到第 i 個結點的位置,並且增加額外資訊並不會讓你得到多大好處,因此沒有必要使用鏈式儲存。

為什麼牛奶不適合用透明包裝?

種花山下十年白菜 為了營養不流失。維生素B2是橙黃色針狀結晶,溶於水,極易溶於鹼性溶液。在乾燥狀態 中性或酸性溶液中對熱及氧化穩定,但在鹼性環境中易於分解破壞。游離型核黃素對日光照射特別是紫外光照射高度敏感,在鹼性溶液中可光解為光黃素而喪失生物活性。牛奶中的核黃素40 80 為游離型,當牛奶暴露于強...

記憶術為什麼不適合用來記憶英語等語言類知識?

因為通過記憶術建立起的毫無關係的對映的數目通常是有限的,記得快,忘得快。或者說背英語單詞本身就是記憶術 具象的詞語能被想象,抽象的詞語能被情緒感知。 喵呼 西方的記憶術最初就是為演講辯論服務的,屬於修辭學的一部分,這些內容應該都可以算是 語言類知識 我覺得題主的意思是在學習一門新語言時,依靠記憶術去...

工科為什麼不適合女生?

和性別沒有關係,和個人愛好有關係。曾經痛恨刻板印象的我,為了證明女生不是不適合學理科,高中學了理科還學了競賽。大學能任選專業時,明明高考只有語文英語挽尊,為了反抗刻板印象,選了某難度大的傳統工科,碩士換了個更難的坑待著。結論是不要為了打破性別刻板印象而頭鐵學不喜歡也不擅長的東西,我就是偏感性而不是理...