Heapify 堆排序 自底向下

2021-09-26 02:25:31 字數 766 閱讀 2967

直接輸入陣列的方式構造堆,其複雜度為o(n);

將n個元素挨個插入空堆來構造堆,複雜度是o(nlogn)

#include #include using namespace std;

/*heapify將陣列構造成堆:從第乙個非葉子節點開始,即count/2使用shiftdown

直接輸入陣列的方式構造堆,其複雜度為o(n);

將n個元素挨個插入空堆來構造堆,複雜度是o(nlogn)

當容量不足時記得開闢新的空間(以下**沒寫)

*/templetevoid heapsort(t arr,int n)

}templateclass maxheap

if(data[k] >= data[j])

swap(data[k], data[j])

k=j;}}

public:/*跟上乙個有所更改*/

maxheap(item arr, int n)

count = n;

for( int i = count/2 ; i >= i ;i --)

shiftdown(i);

}//析構

~maxheap()

int size()

bool empty()

void insert(item item)

int extractmax()};

int main()

return 0;

}

自底向上和自頂向下

動態規劃的式子都是狀態p由狀態q1 q2 q3 之中選擇乙個或幾個計算出來的形式,但是如果一直是一些狀態這樣遞迴下去,最後會無限迴圈的,所以每個式子一直寫下去最後都會得到一些狀態p是常數 遞迴邊界 的形式。以上可構造乙個dag 自底向上就是已經知道了所有遞迴邊界,把所有可能的狀態都算出來。基本步驟是...

自頂向下和自底向上的歸併排序區別

歸併排序中最基本的操作是 歸併 即將兩個 2 路歸併 或兩個以上的有序陣列組合成乙個更大的有序陣列。按照歸併順序的不同,歸併排序可以分為自頂向下和自底向上兩類。自頂向下的歸併排序進行的操作主要就是對陣列的拆分與合併。通過層層拆分得到單元素陣列,天生有序,然後歸併兩個單元素陣列得到乙個較大的有序陣列,...

演算法 歸併排序(自頂向下 自底向上)

思路 實現 兩種實現方式 自頂向下和自底向上 實現 自頂向下 mergesort.h 1 include 2 include 3 include insertionsort.h 4 5using namespace std 67 template8 將arr l.mid 和arr mid 1.r 兩...