C STL 中大根堆,小根堆的應用。

2021-10-06 02:12:59 字數 1591 閱讀 2797

priority_queue<

int, vector<

int>

, less<

int>>s;

//less表示按照遞減(從大到小)的順序插入元素

priority_queue<

int, vector<

int>

, greater<

int>>s;

//greater表示按照遞增(從小到大)的順序插入元素

不寫第三個引數或者寫成less都是大根堆。greater是小根堆。

vector<

int> a;

make_heap

(a.begin()

,a.end()

, less<

int>()

);//建立大根堆

make_heap

(a.begin()

,a.end()

, greater<

int>()

);//建立小根堆

push_heap

(a.begin()

,a.end

());

//將最後乙個元素插入堆中(堆自動調整)

pop_heap

(a.begin()

,a.end

());

//將第乙個元素從堆中刪去(堆自動調整),並放到最後

/*

給定乙個整數陣列,如何快速地求出陣列中第k小的數。假如陣列為:。

*/#if 1

intgetmin

(int

* a,

int len,

int k)

return res;

}int

main()

; cout <<

getmin

(a,6,4

)<< endl;

return0;

}#endif

第四小的數字是:

其他一些關於堆的函式用法 參照:

其他函式應用

/*

真題496:每20個陣列,每個陣列有50個元素,並且使有序的,現在如何在這20*500個陣列中找出排名前5的數。

*/#if 0

#define rows 3

#define cols 5

//int num[rows][cols] = ,, };

int num[rows]

[cols]=,

,};struct node };

void

gettop

(int k)

for(

int i =

0; i < k;

++i)

cout << endl;

}int

main()

#endif

堆(大根堆 小根堆)

堆又可稱之為完全二叉堆。這是乙個邏輯上基於完全二叉樹 物理上一般基於線性資料結構 如陣列 向量 鍊錶等 的一種資料結構。學習過完全二叉樹的同學們都應該了解,完全二叉樹在物理上可以用線性資料結構進行表示 或者儲存 例如陣列int a 5 就可以用來描述乙個擁有5個結點的完全二叉樹。那麼基於完全二叉樹的...

STL應用之大根堆小根堆

定義 priority queue 大根堆 priority queue,greater x 小根堆 訪問最值使用 top 堆自動把最值維護在堆最上層 刪除最值使用 pop 刪除後自動維護出乙個新堆 插入元素使用 push x 插入到元素該在的位置上 並自動維護堆有序 include include...

堆(Heap)大根堆 小根堆

具有以下的特點 1 完全二叉樹 2 heap中儲存的值是偏序 min heap 父節點的值小於或等於子節點的值 max heap 父節點的值大於或等於子節點的值 一般都用陣列來表示堆,i結點的父結點下標就為 i 1 2。它的左右子結點下標分別為2 i 1和2 i 2。如第0個結點左右子結點下標分別為...