堆排序屬於選擇排序
選擇排序的基本思想:
每一趟(第i趟)在後面n-i+1個待排序的元素中選取關鍵字最小的元素,作為有序子串行的第i個元素,直到第
n-1趟做完,待排序元素只剩下1個,就不用再選了。
堆排序適合關鍵字較多的情況(n>1000)
比如:在1億個數中選出前100個最大值?
首先使用乙個大小為100的陣列,讀入前100個數,建立小頂堆,而後依次讀入餘下的數,若小於堆頂則捨棄,
否則用該數取代堆頂並重新調整堆,待資料讀取完畢,堆中的100個數就是前100個最大值。
最壞時間複雜度:o(nlogn),最好的情況下也是o(nlogn),平均時間複雜度是o(nlogn)
空間複雜度是o(1)
堆排序是不穩定的
#include#include #include #include #include #include using namespace std;
void push_up(vector&a,int n)
}void push_down(vector&a,int size,int n)
if(right <= size && a[right] > a[t])
if(t != n) }
void heapsort(vector&a, int n )
for(int i = 0; i < n; i++) }
int main()
十大排序演算法之堆排序
堆排序 heapsort 是指利用堆這種資料結構所設計的一種排序演算法,它是一種選擇排序,時間複雜度是o n log n 本部落格將使用最大堆來實現堆排序。對於堆的具體描述在本部落格的這篇文章 已經對最大堆這種資料結構做出了介紹,故不做重複介紹,主要介紹堆排序。以下是最大堆結構具體實現過程 impo...
演算法 十大排序 堆排序 大頂堆
堆排序 大頂堆 大頂堆和小頂堆的差別在與大頂堆的根節點比它的子節點和葉子節點都要大,大頂堆輸出的時候是正序的而小頂堆是逆序的 同樣的也是有兩步 1,堆化 2,下調public class 03 堆排序大頂堆 sort a for int i 0 i a.length i 進行堆化 public st...
十大排序演算法之 堆排序 七)
堆排序 個人感覺算是十大排序演算法中較難的一種排序演算法。1 首先了解什麼是堆,需要滿足2個條件 滿足完全二叉樹 除了最後一層,每一層都是滿的,有右子樹的前提必需有左子樹 堆分為大頂堆和小頂堆,大頂堆 每乙個節點大於其左右子結點,小頂堆同理。2 完全二叉樹的特性 完全二叉樹適用於陣列儲存 對於乙個結...