堆排序之一

2021-06-19 13:12:53 字數 433 閱讀 2964

這兩天在看演算法導論。剛開始又算是回憶一遍資料結構的東西。

今天做了堆排序。首先理清思路,怎麼實現堆排序。

將其視為乙個完全二叉樹,採用陣列的結構儲存。了解完全二叉樹中父節點和孩子節點的序號關係。

第一步:構造能夠調整父節點和孩子節點大小的子函式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 用於構建堆,從最後乙個非葉子結點索引開...