排序 堆排序!

2022-06-19 03:51:12 字數 738 閱讀 5092

挖了好久的坑終於填了進來qaq

大頂堆(從小到大排序):

每次調整就是在這個節點上,找他的孩子們是否大於它,如果大於就交換位置,然後再從它的孩子的孩子裡面重複這個過程,保證父親是兩個孩子中最大的,而兩個孩子誰大不一定。

剛開始初始化時,從第乙個有孩子的父親點出發,由下到上不斷調整這個堆。

(每次調整都是調整乙個父親點及其以下)想要調整所有的父親點,要迴圈了。

然後堆的第乙個值就是最大值,把最大值和最後一位交換,然後在從n-1前面的數找最大的,也就是在n個數中次大的,放到n-1的位置上,就這樣一直找。

1 #include2 #include3 #include

4 #include5 #include6 #include7 #include8

using

namespace

std;

9int n, a[110

];10

void adjust(int i,int

n)1125}

26void dui(int

n)2737}

38int

main()

39

view code

這樣一寫我發現,就是選擇排序鴨,從n個數中找到最大的,放到最後,再從n-1個數找到次大的,放到倒數第二個位置上。而堆優化就是每個數隻需要和他的孩子們比較就可以。

時間複雜度是 o(nlogn)

無序陣列找第k小,堆排序

找第k小

堆排序 堆排序優化 索引堆排序

堆排序 堆排序優化 索引堆排序 注 堆排序 索引堆排序 都是不穩定的排序。注 索引最大堆排序有誤!有沒有大神可以指點一二?1 堆 所有元素 都從索引0開始 父親結點索引 i 左孩子結點索引 2i 1 右孩子結點索引 2i 2 左後乙個非葉子結點索引 n 1 2 用於構建堆,從最後乙個非葉子結點索引開...

堆排序 堆排序優化 索引堆排序

堆排序 堆排序優化 索引堆排序 注 堆排序 索引堆排序 都是不穩定的排序。注 索引最大堆排序有誤!有沒有大神可以指點一二?1 堆 所有元素 都從索引0開始 父親結點索引 i 左孩子結點索引 2i 1 右孩子結點索引 2i 2 左後乙個非葉子結點索引 n 1 2 用於構建堆,從最後乙個非葉子結點索引開...

堆排序 模擬堆排序

838.堆排序 輸入乙個長度為n的整數數列,從小到大輸出前m小的數。輸入格式 第一行包含整數n和m。第二行包含n個整數,表示整數數列。輸出格式 共一行,包含m個整數,表示整數數列中前m小的數。資料範圍 1 m n 1051 m n 105,1 數列中元素 1091 數列中元素 109 輸入樣例 5 ...