堆排序(解決排序問題)

2021-10-02 23:29:01 字數 736 閱讀 6369

我之前的文章解析過排序的幾種方法,這次的堆排序原理很好理解,但**的實現並不簡單,我覺得不適合入門。

堆排序的實現實際上是把根節點提取出來,不管是最大堆還是最小堆,根節點永遠是極值。

①乙個交換函式——在**中實現交換。

②向下調整函式——它的作用是調整函式使它符合堆的特點。

③乙個建立堆的函式

④刪除函式——每次刪除極值。

⑤主函式

將99、5、36、7、22、17、46、12、2、19、25、28、1、92排序

#include

int h[

101]

;//用來存放對的陣列

int n;

//用來記錄堆中元素個數

//交換函式

void

swap

(int x,

int y)

//下調函式

void

siftdown

(int i)

//i為傳入調整節點,這次為下調,上調同理

//若果不相等說明有更小值

if(t!=i)

else

flag=1;

}return;}

//建立堆

void

creat()

return;}

//提取跟函式

intdeletemax()

intmain()

排序問題 堆排序

堆排序是基於優先佇列 使用基於陣列的大頂堆或者小頂堆 的排序,是乙個 建堆 刪除 調整 刪除 調整 的過程。在 個元素組成的二叉堆中,建堆的時間複雜度是o n 之後執行n次刪除堆頂元素和調整 時間複雜度為o logn 將每次刪除的元素一次放入乙個序列中便得到了乙個有序數列,時間複雜度為o n o n...

堆排序問題

堆,本質上是乙個完全二叉樹,可以用陣列來表示,這樣非常的方便。最大堆 從陣列的第一號開始排,a 0 為空,方便計算。那麼ai a2i ai a 2i 1 那麼就是最大堆 最小堆 從陣列的第一號開始排,a 0 為空,方便計算。那麼ai a2i ai a 2i 1 那麼就是最小堆。ifndef dui ...

堆排序問題

給出乙個記錄序列,用堆排序的方法將其進行公升序排列,輸出結果,輸出時要求有文字說明。請任選一種語言編寫程式實現上述演算法,並分析其演算法複雜度 堆排序 堆排序是利用堆這種資料結構而設計的一種排序演算法,堆排序是一種選擇排序,它的最壞,最好,平均時間複雜度均為o nlogn 它也是不穩定排序。首先簡單...