堆的簡單實現和應用

2022-09-01 08:36:10 字數 900 閱讀 3433

一、用陣列儲存的堆和由此堆上實現的簡單排序。

雖然對排序保證了最壞情況下的o(n log n)的效能,但對於常見輸入,最快的堆排序也比簡單快速排序慢。

1 #include2

using

namespace

std;

3int x[100];4

void siftup(intn)5

17}18void siftdown(int

n)25

if(c + 1

<=n)

29if(x[i] <=x[c])

30break;31

swap(x[c] , x[i]);

32 i =c;33}

34}35int

main()

3643

while

(n)50 cout<51return0;

52 }

二、用堆和c++模板實現的優先順序佇列

1 #include2

using

namespace

std;

3template

4class

priqueue514

public

:15 priqueue(int

m)

20void

insert(t t)

2627

t extractmin()

38return

t;39}40

};41

42int

main()

4350

for(int i = 0; i < 10 ; i ++)

53 cout<54return0;

55 }

堆的簡單應用

一 大資料的處理 給出n個資料,要求找到並輸出這n個數裡面最大的k個數 思路 利用堆,先建乙個開闢乙個大小為k的陣列,從n個資料裡拿出k個資料放到堆裡面,然後再通過向 下調整法把堆調整為最小堆,此時陣列的第乙個元素就是堆裡面最小的元素,然後在剩下的n k個 資料中依次和堆裡面最小的資料進行比較,若比...

堆的簡單實現

堆資料結構是一種陣列物件,可被視為一顆完全二叉樹 堆結構的二叉樹儲存 最大堆 父 子 最小堆 父 子 如下圖,先建立乙個大堆 下面用 模擬實現乙個大堆 插入 頭刪 include include include using namespace std template class heap heap...

c 對堆的簡單實現

include using namespace std typedef class poinner on class poinner on create int maxsize bool isempty on head bool isfull on head void insert on head,...