#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是乙個動態陣列 當你需要多少...