優先順序佇列可以通過陣列自己維護優先順序,也可以用stl自帶的優先順序佇列priority_queue
#include
大根堆:priority_queueque 或 priority_queue, less> que
小根堆:priority_queue, greater> que
關於優先順序佇列的應用:
1. 取中位數
問題關鍵在於將所有資料儲存在兩個優先順序佇列中,若將所有資料按從小到大順序排列,較小的部分儲存在大根堆中,較大的部分儲存在小根堆中,永遠保持:大根堆(較小部分)的長度 = 小根堆(較大部分)的長度,或者大根堆(較小部分)的長度 = 小根堆(較大部分)的長度 + 1。從而使得大根堆的頂部是中位數(奇數個資料)或大根堆和小根堆的頂部的平均值是中位數(偶數個資料)。
#include #include #include #include using namespace std;
class solution
}else
}} }
double getmedian()
private:
priority_queue, less> up; // big top
priority_queue, greater> down; // small top
};int main()
); for (int i = 0; i < vec.size(); ++i)
system("pause");
return 0;
}
結果:
堆的應用 優先順序佇列
標頭檔案 pragma once ifndef heap h define heap h typedef int datatype typedef int compare datatype left,datatype right typedef struct heap heap void creat...
堆的應用 優先順序佇列和堆排
優先順序佇列 就是佇列中的元素是有優先順序的,比如將優先順序最高的放在隊頭,最低的放在隊尾,那麼在對佇列進行操作時,如,出佇列,只能先出優先順序最高的,入佇列,也要根據元素的優先順序,將其放在對應的優先順序處。優先順序佇列的本質就是佇列裡面封裝了堆,具體 如下,下面 用到的堆可參考 pragma o...
堆應用 優先順序佇列(Priority Queue)
優先順序佇列的實現方法有很多種,這裡我們通過堆來構建 以降序,大堆為例 1.入佇列 通過尾插的方式入佇列,因為會破壞原有的堆結構,所以通過向上調整恢復堆結構。2.出佇列 若直接取出隊首元素的話,會影響後面元素的位置,所以我們將隊首元素與隊末元素交換,尾刪 size 再將交換後的0號元素進行向下調整,...