資料結構之堆排序(最小堆)輸出最小值操作

2021-09-27 05:53:37 字數 684 閱讀 1469

輸入乙個長度為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 然後該元素下沉到合適位置 下沉過程中,選取左右子節點的最小值,...