堆排序之建初始堆

2021-09-26 14:33:57 字數 635 閱讀 8444

在牛客網上看到一道題

答案是c,但是之前只接觸插入法建堆,沒了解篩選法建初始堆,於是網上衝浪,查詢了一波解析,於是有了現在這個思路總結(看半天也沒有看到比較靠譜的**),然後總結了一下,按照這種思路,能得到c答案,但仍然存在一點疑惑(初始堆難道不應該是大頂堆或者小頂堆嘛,這結果也不是呀,還是說,有什麼定義我不知道?求解),需要再去看看書。。。

最終還是覺得答案是錯的,按照概念重新更正了**和偽**。感覺答案應該是:-1,4,7,8,20,15,7,9

堆排序建初始堆有兩種思路:

篩選法:將當前待排序的n個記錄為作為乙個大小為n的一維陣列,然後向下取整parent=n/2開始比較(即為最後乙個非葉節點),用圖和一段偽**做了介紹(待指正)

偽** 

for(int i=n/2;i>0;i--)

}if(arr[min]插入法:將n個記錄依次插入二叉樹中,若其比父節點值小,則浮操作,直到其比父節點大

堆排序建立初始堆

假設我們有乙個陣列int a 如果把這個陣列看作是完全二叉樹的順序儲存,那麼它對應圖1 1 a 完全二叉樹。所謂最大堆就是a i a 2i 1 且a i a 2i 2 i在此處對應0 5 這個描述即第四步的結果。也就是說我們把陣列a經過4步調整,最終構建出了它的最大堆,如圖1 1 d 另外需要說明的...

堆排序怎麼建立初始堆 學習筆記 詳解堆排序

堆排序 英語 heapsort 是指利用堆這種資料結構所設計的一種排序演算法。堆是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點。堆 heap 是電腦科學中一類特殊的資料結構的統稱。堆是一種非線性結構。可以把堆看作乙個陣列,也可以被看作乙個完全二叉...

排序演算法之(7) 堆排序

堆排序主要是利用了堆的性質,對於大頂堆 堆中的每個節點的值都不小於它的孩子節點的值,詳細可參考我的另一篇部落格那麼大頂堆的堆頂元素就是當前堆中所有元素中最大的。利用這個性質,進行如下操作,則可以得到乙個有序序列 將待排序的n個元素乙個乙個插入堆中,那麼此時堆頂元素就是所有元素中最大的 將堆頂元素取出...