實現堆排序

2021-09-28 17:51:55 字數 749 閱讀 8389

一.  借助堆這種資料結構實現的排序, 就叫做堆排序.

1.  原地排序

2.  複雜度穩定,為o(nlogn)

3.  堆排序的過程可以分解為兩個步驟, 建堆和排序.

4. 首先將陣列原地建堆.  從後往前處理陣列, 每個資料從上往下堆化.(注意需要從第乙個非葉子節點開始).

5. 排序. 有點類似"刪除堆頂元素"操作. 將堆頂元素(整個陣列最大值)與陣列最後乙個元素互換.再通過堆化,將剩下n-1個元素構成堆.

一直重複, 直到堆中只剩下乙個元素.

#include #include using namespace std;

void swap(int &a, int &b)

//從上往下堆化.

void heapify(vector& a, int n, int i)

}//假設陣列從下標0開始.

堆排序實現

今天抽空寫了個堆排序的演算法,廢話不多說,直接上源 include include includeusing namespace std define maxsize 6 void print int a,int size maxsize void percolate up int a,int si...

堆排序實現

1 堆排序演算法描述 1 定義 n個關鍵字序列kl,k2,kn稱為 heap 當且僅當該序列滿足如下性質 簡稱為堆性質 1 ki k 2i 且ki k 2i 1 1 i n 2 當然,這是小根堆,大根堆則換成 號。k i 相當於 二叉樹的非 葉子結點,k 2i 則是左子節點,k 2i 1 是右子節點...

實現堆排序

堆排序是在程式設計中經常用到的東西,在c 的stl底層裡面有make heap,push heap,pop heap 和 sort heap四個介面函式,我們用到的最多的是stl中的priority queue,其中的底層也是利用前面幾個函式實現的。下面我們就自己實現以下堆排序,主要包括調整堆結構,...