資料結構排序演算法之堆排序

2021-07-10 10:35:33 字數 768 閱讀 1309

關於堆排序的相關知識非常複雜,不懂得可以參考任意一本資料結構教程,本部落格只對堆排序框架及**進行講解。

堆排序分三個大的步驟:建初堆,堆調整,堆排序(其中最核心的是堆調整)

1建初堆:從陣列中的最後乙個非葉子節點開始,從下而上倒推(重複呼叫堆調整函式)

2堆調整:堆調整的前提是已建好了乙個堆,但是因為輸出,導致需要重新調整堆,首先獲得根節點的子節點中的較大的乙個節點,然後將其與根節點進行比較看是否需要調整

如果不需要則可以直接結束此次的堆調整函式,因為堆調整的前提是已建好了乙個堆,但是因為交換堆頂元素與堆尾元素,導致需要重新調整堆,因此如果某個節點不需要調整,則其子孫節點都不需要調整。

注意:賤初堆是自底向上的過程,而堆調整是自頂向下的過程。

3堆排序:從陣列中所有元素開始,將堆頂元素與堆尾元素交換,然後陣列的元素個數減一,然後繼續呼叫堆調整函式。

基於以上框架,堆排序的**如下:

#includeusing namespace std;

void sift(int a,int root,int len)//堆調整函式

資料結構 堆排序(演算法)

基本介紹 基本思想 舉例 示例 public class heapsortdemo 1 將無序陣列構建成乙個堆,根據公升序降序需求選擇大頂堆或小頂堆 int k 1 for int i arr.length 2 1 i 0 i 2 將堆頂元素與末尾元素交換,將最大的元素 沉 到陣列末端 3 重新調整...

資料結構之堆排序

在資料結構中,堆排序是非常重要的乙個知識點,尤其像在期末考試 考研等計算機考試中經常會考察堆排序,並要求畫出示意圖.下面主要通過一道考研題目講述堆排序的知識,希望對大家有所幫助.文章內容參考嚴蔚敏的 資料結構 王道論壇的 資料結構 和自己的一些理解 參看動態圖 堆排序是一種樹形選擇排序方法,它的特點...

資料結構之堆排序

堆排序就是利用堆 本文利用大頂堆 進行排序的方法。它是選擇排序的一種。可以利用陣列的特點快速定位指定索引的元素。堆分為大根堆和小根堆,是完全二叉樹。它的基本思想是,將待排序的序列構造成乙個大頂堆。此時,整個序列的最大值就是堆頂的根結點。將它移走 就是將它與堆陣列的末尾元素交換,此時末尾元素就是最大值...