輸入乙個長度為n的整數數列,從小到大輸出前m小的數。
輸入格式
第一行包含整數n和m。
第二行包含n個整數,表示整數數列。
輸出格式
共一行,包含m個整數,表示整數數列中前m小的數。
資料範圍
1≤m≤n≤105
,1≤數列中元素≤109
輸入樣例:
5 34 5 1 3 2
輸出樣例:
1 2 3
#includeusing namespace std;
const int n=100010;
int n,m;
int heap[n],size;
void down(int u)
{ int t=u;
if(2*u<=size&&heap[2*u]>n>>m;
size=n;//這個中間變數size非常重要,而且它的定義必須要在最前面,否則down類就無法執行,而且它的值必須在開始就定義好,否則下面的down(i)也動不了
for(int i=1;i<=n;i++) cin>>heap[i];
for(int i=n/2;i;i--) down(i);
for(int i=1;i<=m;i++)
{cout《一開始做的時候把size=n寫在down(i)下面了,根本進不了迴圈,這個需要注意!!!
最小堆排序
堆的定義是 n個元素的序列,當且僅當滿足如下關係時被成為堆 1 ki k2i 且 ki k2i 1 或 2 ki k2i 且 ki k2i 1 i 1,2,n 2 當滿足 1 時,為最小堆,當滿足 2 時,為最大堆。若將此序列對應的一維陣列堪稱是乙個完全二叉樹,則2i和2i 1個節點分別是節點i的左...
6 資料結構 最小堆
開發過程,經常需要對資料集合進行維護。維護資料結合的資料結構可統稱為容器。最小堆是維護資料集合的容器的一種,最小堆具備如下性質 設v i 為位置i的元素值 1.對維護的n個元素,順序儲存於索引為1 n的陣列位置 2.對索引i,若索引2 i n,有v i v 2 i 若索引2 i 1 n,有v i v...
基本資料結構 最小堆
最小堆,是完全二叉樹,其基本定義是任何乙個節點小於其左右子樹的節點 常見操作 加入乙個值,取最小值,刪除最小值 加入乙個值,直接加入到末尾a size 然後該元素上浮到合適位置 最大值即根節點 a 0 刪除最小值,讓末尾元素填充到a 0 然後該元素下沉到合適位置 下沉過程中,選取左右子節點的最小值,...