排序演算法(二)之堆排序

2021-12-29 20:04:04 字數 805 閱讀 2704

建堆:o(n*lgn)

插入:o(lgn)

刪除:o(lgn)

也分析了為什麼優先順序佇列的底層要用堆!!如果上篇關於堆的文章看懂之後,下邊的堆排序就比較好寫了。

我們知道堆的特點是:第乙個元素要麼是最大值(大堆),要麼是最小值(小堆),這樣在排序的時候,直接將第乙個

元素和最後乙個元素進行交換,然後從第乙個元素開始進行向下調整。

所以,如果需要公升序,就建乙個大堆,需要降序,就建乙個小堆。

下邊用再來說明這樣乙個過程:

【實現**】

#include

using namespace std;

void adjustdown(int a,size_t i,size_t len)

else

break; }}

void heapsort(int a, size_t n)

/*for (size_t i = 0;i < n;++i)

*/ for (size_t i = n-1;i > 0;--i) }

void show(int a,size_t n)

cout << endl;

}void testsort()

; heapsort(a,7);

show(a,7);

}int main()

排序演算法之堆排序

前言 今天我來介紹下堆排序,在寫堆排序 之前,我們要知道堆的概念!堆的定義 n個關鍵字序列kl,k2,kn稱為 heap 當且僅當該序列滿足如下性質 簡稱為堆性質 1 ki k 2i 且ki k 2i 1 1 i n 當然,這是小根堆,大根堆則換成 號。k i 相當於二叉樹的非葉子結點,k 2i 則...

排序演算法之堆排序

堆排序演算法是選擇排序的一種,該演算法只是通過堆,最大堆 或者最小堆選擇出乙個待排序序列中的最大值,或者最小值。要想實現堆排序演算法,就需要構建什麼堆,這裡也最小堆為例。說明什麼是堆,怎麼構建乙個堆。假設待排序序列為a n 為乙個陣列。陣列的長度為n 陣列下標為 0,1,2,i,2i,2i 1 n ...

排序演算法之堆排序

宣告 本博文 為樓主親自編寫並測試,其它內容引用至我一直很崇拜的牛人morewindows。他對排序演算法的講解通俗易懂,給人一種耳目一新的感覺。堆排序與快速排序 歸併排序 一樣都是時間複雜度為o n logn 的幾種常見排序方法。最小堆的講解以及最小堆元素的插入和刪除參見最小堆操作。以下繼續引用以...