這兩天在看演算法導論。剛開始又算是回憶一遍資料結構的東西。
今天做了堆排序。首先理清思路,怎麼實現堆排序。
將其視為乙個完全二叉樹,採用陣列的結構儲存。了解完全二叉樹中父節點和孩子節點的序號關係。
第一步:構造能夠調整父節點和孩子節點大小的子函式heap(a,i).
第二步:從底向上構造堆結構。
1. #include
using namespace std;
#define n 11
void heapify(int a,int i)
;heapify(a,2);
for(int j=1;j}
2.int main()
;for(int i=n/2;i>0;i--)
for(int j=1;j}
但是有乙個問題就是,浪費乙個儲存空間a[0]。咋整呢
演算法系列之一 堆排序
前序 二叉 堆資料結構是一種陣列物件,它可以被視為一棵完全二叉樹。樹中每個節點與陣列中存放該節點值的那個元素對應。樹的每一層都是填滿的,最後一層除外。樹的根為a 1 在這裡是從1開始的,也可以從0開始 給定了某個節點的下標i,其父節點為i 2,左二子為2 i,右兒子為2 i 1。二叉堆滿足二個特性 ...
堆排序《一》 簡單結構堆排序
堆排序 利用最大堆 最小堆完成排序 用陣列儲存,但邏輯結構為 完全二叉樹 heapelem arr 物理結構 邏輯結構 i 3 要調整的結點 j i 2 1 左孩子結點 對 3 7 8 進行判斷,已符合最小堆規則 則不調整 break arr i tmp pos 開始迴圈調整 2位置的 while ...
堆排序 堆排序優化 索引堆排序
堆排序 堆排序優化 索引堆排序 注 堆排序 索引堆排序 都是不穩定的排序。注 索引最大堆排序有誤!有沒有大神可以指點一二?1 堆 所有元素 都從索引0開始 父親結點索引 i 左孩子結點索引 2i 1 右孩子結點索引 2i 2 左後乙個非葉子結點索引 n 1 2 用於構建堆,從最後乙個非葉子結點索引開...