堆排序是利用堆這種數據結構而設計的一種排序算法,堆排序是一種選擇排序,它的最壞,最好,平均時間複雜度均爲O(nlogn),它也是不穩定排序。首先簡單瞭解下堆結構。算法
堆數組
堆是具備如下性質的徹底二叉樹:每一個結點的值都大於或等於其左右孩子結點的值,稱爲大頂堆;或者每一個結點的值都小於或等於其左右孩子結點的值,稱爲小頂堆。以下圖:數據結構
同時,咱們對堆中的結點按層進行編號,將這種邏輯結構映射到數組中就是下面這個樣子設計
該數組從邏輯上講就是一個堆結構,咱們用簡單的公式來描述一下堆的定義就是:blog
大頂堆:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2] 排序
小頂堆:arr[i] <= arr[2i+1] && arr[i] <= arr[2i+2] 二叉樹
ok,瞭解了這些定義。接下來,咱們來看看堆排序的基本思想及基本步驟:im