建立二叉堆 STL練習

2021-10-14 09:02:20 字數 1380 閱讀 7002

算是對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 ...