算是對stl的一道練習題
思想:
1.建立向量a,輸入測試資料
2.基於陣列下標,判斷當前堆頂是否已滿足要求
code:
#include
#include
#include
#include
using
namespace std;
// 傳入陣列a和下標i,i的左右子樹都滿足最大堆的性質,函式將a整體調整為最大堆
void
heap_down
(std::vector<
int>
&a,int i)
// 如果右子樹存在且a[maximum]小於a[right]
if(right < a.
size()
&&a[maximum]
< a[right])if
(maximum == i)
// 交換a[i]和a[maximum]
int temp = a[i]
; a[i]
= a[maximum]
; a[maximum]
= temp;
i = maximum;
// 將i指向maximum,繼續向下調整}}
// 建堆可以呼叫heap_down來實現
void
make_heap
(vector<
int>
&a)}
intmain()
// 當傳入的compare是gerater時,建立最小堆
printf
("\nmake_heap greater(smallheap):\n");
make_heap
(a.begin()
,a.end()
,greater<
int>()
);for(
int i =
0; i < a.
size()
; i++
)// 當傳入的compare是less時,建立最大堆
printf
("\nmake_heap less(bigheap):\n");
make_heap
(a.begin()
,a.end()
,less<
int>()
);for(
int i =
0; i < a.
size()
; i++
)return0;
}
此段**非原創**,僅供學習交流用 二叉堆部分練習
本練習主要做了幾個工作 1.給定乙個陣列來初始化二叉堆,第一種方法是通過不斷插入,時間複雜度是o nlgn 第二種方法是先把陣列填入二叉堆,再從下標為h size 2的節點開始下濾,這是因為只有下標小於為h size 2才有孩子,從而可以用線性時間完成二叉堆的初始化。2.二叉堆的下濾和上濾,對二叉堆...
3110 二叉堆練習3
時間限制 3 s 空間限制 128000 kb 題目等級 gold description 給定n n 500,000 和n個整數 較有序 將其排序後輸出。輸入描述 input description n和n個整數 輸出描述 output description n個整數 公升序 樣例輸入 samp...
3110 二叉堆練習3
時間限制 3 s 空間限制 128000 kb 題目等級 gold 題解檢視執行結果 給定n n 500,000 和n個整數 較有序 將其排序後輸出。輸入描述 input description n和n個整數 輸出描述 output description n個整數 公升序 樣例輸入 sample ...