什麼是堆?堆的實現以及堆排序(C語言版) 超詳細!

2021-10-09 05:56:46 字數 959 閱讀 8077

堆,英語heap,是電腦科學中的一種特別的完全二叉樹。

堆始於j. w. j. williams在2023年發表的堆排序(heap sort),當時他提出了二叉堆樹作為此演算法的資料結構。

性質:

若母節點的值恆小於等於子節點的值,此堆稱為最小堆/小頂堆(min heap)

若母節點的值恆大於等於子節點的值,此堆稱為最大堆/大頂堆(max heap)

在堆中最頂端的那乙個節點,稱作根節點(root node),根節點本身沒有母節點(parent node)。

#include

#include

#define maxn 100000 + 7

//可以存放的樹的結點數目

int n;

int h[maxn]

;//存放指向樹結點位址的指標

intswap

(int x,

int y)

//間接交換結點

//下沉操作

void

shift_down

(int cur)

//傳入當前結點的所在位置

if(h[cur]

> h[pos]

)//接著比較當前結點與較小的孩子結點哪個小,如果孩子結點小

}//建堆,大洗牌,重建小頂堆

void

build()

}//取堆的根節點

intget_top()

intmain()

build()

;//建堆

int len = n;

for(

int i =

1; i <= len; i++

)return0;

}

執行結果示圖:

堆 堆的定義以及堆排序

堆是一類特殊的資料結構統稱,堆通常可以被看做一顆樹的陣列物件。堆滿足下列性質 1 堆中某個節點的值總是不大於或不小於其父節點的值 2 堆總是一顆完全二叉樹。完全二叉樹 除最後一層外,每一層上的節點數均達到最大值 在最後一層上只缺少右邊的若干結點。滿二叉樹 樹中除了葉子節點,每個節點都有兩個子節點 完...

堆的基本實現以及堆排序

heap.h pragma once include include include include include includetypedef int hpdatatype typedef struct heap heap void heapcreat heap hp,hpdatatype a,...

堆的實現以及堆排序 最大堆,最小堆

堆是一種特殊的資料結構,相當於陣列實現的一顆二叉樹,但是和一般的二叉搜尋樹不同 1.堆分為最大堆 父結點的值必大於其孩子結點的值 和最小堆 父結點的值必小於其孩子結點的值 而二叉搜尋樹中左孩子結點的值小於父節點的值,右孩子結點的值大於父節點的值。2.堆採用陣列形式儲存,相較於二叉樹的鍊錶結構減少記憶...