直接輸入陣列的方式構造堆,其複雜度為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 兩...