1. 程式人生 > >【算法導論】第六章、堆排序

【算法導論】第六章、堆排序

兩個 高度 位置 思想 n) 隊列 sigma 復雜 max

基本過程:

1、保持最大堆的性質:假設兩個子堆都滿足,只需要根節點依次換下去,復雜度O(lg n)

2、初始化堆:後半段都是葉子,在前半段從後往前,依次執行上述最大堆性質的操作,名義復雜度是O(n lg n),但是有更精確的計算,

  在高度為h的節點為O(h), 因此為 n\sigma (h / 2^h),其復雜度為O(n)。(思想是高層復雜度才高,指數衰減,而復雜度增長是lg級別,因此被dominate掉了)

堆排序算法:先建最大堆,每次把頂上的位置與合適的位置互換,然後執行過程1, 共執行n次,其復雜度為 O(n lg n)

優先級隊列:集合的一個管理方式

操作:insert(x, S), max(S), extract_max(S), increase(x, k, S) - 將x的值增長為k,

1、max 很顯然。。。取第一個元素即可

2、extract_max 與之前相同,O(lg n),

3、insert操作:在最後加入,然後一點一點上移。

堆排序代碼:未完待續

【算法導論】第六章、堆排序