堆排序的細節和復雜度分析(非常重要,一定要會)


1.時間復雜度O(NlogN),額外空間復雜度O(1)

2.二叉樹:

  (1)完全二叉樹:要么是一棵滿二叉樹(滿二叉樹屬於完全二叉樹);如果不是滿二叉樹,那么這棵樹應該是從左往右依次補齊的。

  (2)通過數組來理解完全二叉樹,對於節點i,在不越界的情況下左孩子的下標是2i+1,右孩子下標是2*i+2,如果數組越界了,那就說明右孩子不存在。對於節點i,它的的父節點的下標是(i-1)/2。0的父節點是自己。

3.大根堆(堆就是一棵完全二叉樹),即在一棵完全二叉樹中,任何一棵子樹的最大值都是這課子樹的頭部,小根堆同理,任何一棵子樹的最小值都是這課子樹的頭部,對於任何一棵子樹都是這樣的。建立大根堆的時間復雜度是O(N),heapinsert的調整,經歷一個新節點加入到這棵樹種,同時向上調整的過程。對於i號節點加入進來調整的代價是O(log(i-1)),第i+1個節點加入進來調整的代價是O(log(i)),對於n個節點的調整代價是log1+log2+log3+......+log(n-1),這是整個數組所有節點加進來變成完全二叉樹的時間復雜度O(N),再重復一遍,建立大根堆的時間復雜度是O(N)。把節點加入到堆的最后一個位置,然后將節點向上調整的過程。

4.堆結構非常重要:堆可以搞定幾乎所有的貪心算法。

5.堆排序非常重要

  (1)堆排序heap insert與heapify。

  (2)堆結構的增大與減少。

  (3)如果只是建立堆得過程,時間復雜度為O(N)。

  (4)優先級隊列結構,就是堆結構。

6.數組堆排序的過程:

  (1)讓數組變成大根堆,然后將堆頂元素彈出,調整堆,繼續之前操作。

6.舉例:

  對於數組 :2 1    3    6    0     4

具體細節下一博客講


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM