天天看點

一步一步寫算法(之堆排序)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。  聯系信箱:feixiaoxing @163.com】

    堆排序是另外一種常用的遞歸排序。因為堆排序有着優秀的排序性能,是以在軟體設計中也經常使用。堆排序有着屬于自己的特殊性質,和二叉平衡樹基本是一緻的。打一個比方說,處于大堆中的每一個資料都必須滿足這樣一個特性:

    (1)每一個array[n] 不小于array[2*n]

    (2)每一個array[n]不小于array[2 * n + 1]

    建構這樣一個堆隻是基礎,後面我們需要每次從堆的頂部拿掉一個資料,不斷調整堆,直到這個數組變成有序數組為主。是以詳細的堆排序算法應該是這樣的:

    1)建構大堆,使得堆中的每一個資料都滿足上面提到的性質

    2)将堆的第一個資料和堆的最後一個資料進行互換,然後重新調整堆,直到堆重新平衡為止

    3)重複2)的過程,直到整個數組有序。

    上面的描述過程很簡單,那麼實踐操作是怎麼樣的呢?

    a)對入參進行判斷

b)建構大堆和調整大堆

c)建構大堆的細節操作部分

    d)大堆疊代調整

    e)對單分支節點和滿分支節點分别處理

f)堆排序算法介紹完畢,建立測試用例驗證

【預告: 下面的部落格介紹一些常用的資料結構】

繼續閱讀