挖了好久的坑終於填了進來qaq
大頂堆(從小到大排序):
每次調整就是在這個節點上,找他的孩子們是否大於它,如果大於就交換位置,然後再從它的孩子的孩子裡面重複這個過程,保證父親是兩個孩子中最大的,而兩個孩子誰大不一定。
剛開始初始化時,從第乙個有孩子的父親點出發,由下到上不斷調整這個堆。
(每次調整都是調整乙個父親點及其以下)想要調整所有的父親點,要迴圈了。
然後堆的第乙個值就是最大值,把最大值和最後一位交換,然後在從n-1前面的數找最大的,也就是在n個數中次大的,放到n-1的位置上,就這樣一直找。
1 #include2 #include3 #includeview code4 #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
這樣一寫我發現,就是選擇排序鴨,從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 ...