堆的實現和STL

2021-10-06 22:04:42 字數 1818 閱讀 8327

#include

"pch.h"

#include

#include

#include

#include

using

namespace std;

const

int maxn =

100;

int heap[maxn]

, n =10;

//heap為堆 n為元素個數

//堆heap陣列在[low,high]範圍進行向下調整,即與孩子比

//low為欲調整節點的陣列下標,high為堆最後乙個元素的下標

void

downadjust

(int low,

int high)

//如果孩子中權值最大的權值比欲調整節點大

if(heap[j]

> heap[i]

)else}}

/*建堆:若序列元素個數為n,完全二叉樹葉子節點個數為n/2+1 所以下標在

[1,n/2]範圍內的都是非葉子節點。考研從n/2開始倒著列舉節點,隨每個遍歷到的

節點i進行[i,n]範圍調整。

*/void

createheap()

}//刪除堆頂元素

void

deletetop()

//對heap陣列在[low,high]範圍進行向上調整

//對low一般設定為1,high表示欲調整節點的陣列下標

void

upadjust

(int low,

int high)

else}}

//新增元素

void

insert

(int x)

//堆排序

void

heapsort()

}//stl 庫中

/*make_heap():建堆

push_heap():在堆中新增元素。新增數到陣列末尾然後呼叫

pop_heap():在堆中刪除元素。呼叫之後pop_back陣列最後乙個數

sort_heap():堆排序

*/void

printhep

(vector<

int>

&v) cout << endl;

}int

main()

;make_heap

(min.

begin()

, min.

end(

), greater<

int>()

);//建立小根堆

printhep

(min)

;//插入元素

min.

push_back(20

);push_heap

(min.

begin()

, min.

end(

), greater<

int>()

);//刪除堆頂

pop_heap

(min.

begin()

, min.

end(

), greater<

int>()

);min.

pop_back()

;//堆排序

sort_heap

(min.

begin()

, min.

end(

), greater<

int>()

);printhep

(min)

;return0;

}

STL中的堆操作

堆在我們做演算法時應該有映像吧,分為大根堆,小根堆。stl中的其實是對堆有實現的,使得我們可以直接拿來用。相關的函式是make heap push heap pop heap sort heap make heap make heap first,end,cmp 引數有3個,第乙個為堆建立堆的第乙個...

STL之堆操作

首先來看完全二叉樹的定義 若設二叉樹的深度為h,除第 h 層外,其它各層 1 h 1 的結點數都達到最大個數,第 h 層所有的結點都連續集中在最左邊,這就是完全二叉樹。而將一維陣列視為完全二叉樹書得到的即為堆。堆效率極高,像十分常用的 排序演算法 dijkstra 演算法 prim 演算法等都要用堆...

關於STL中堆的建立

最近總有新手要問堆怎麼寫,我是這麼想的 既然都學c 了,堆這種東西怎麼能手寫呢,太對不起stl了 當然能手寫的都是的大神了,這只是我懶得手打的理由 正好之前機房有位大神將他學習的堆教給了我 我就以他講的寫一篇blog來幫助其他人吧 這裡先介紹一下vector vector是乙個動態陣列 當你需要多少...