排序演算法之堆排序

2021-07-03 21:45:26 字數 609 閱讀 7839

堆排序是一種樹形選擇排序,是對直接選擇排序的有效改進。

堆是一種資料結構,其定義:任何乙個非葉結點的值,都不大於(或不小於)其左右孩子結點的值。若父親大孩子小,則這樣的堆叫做大頂堆;若父親小孩子大,則這樣的堆叫做小頂堆。顧名思義,大頂堆的根結點的值是最大的,小頂堆的根結點的值是最小的。

首先,將乙個無序序列調整為大頂堆(小頂堆),我們就找到了這個無序序列的最大(或最小)值,然後將這個值交換到序列的最後(或最前)位置,這樣有序序列元素就增加1個,無序序列元素減少1個,接著對這樣的無序序列重複進行上述的操作,直到交換最後兩個元素完成為止,我們就能得到最終的n個結點的有序序列。

private

void

heapsort(int a)

}private

void

buildmaxheap(int a, int lastindex) else

break;}/*

* 不需要進行調整後,讓進行調整的結點回歸到正確的位置(即i所指向的索引位置)

*/a[i] = temp;

}}private

void

swap(int a, int i, int j)

排序演算法之堆排序

前言 今天我來介紹下堆排序,在寫堆排序 之前,我們要知道堆的概念!堆的定義 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 的幾種常見排序方法。最小堆的講解以及最小堆元素的插入和刪除參見最小堆操作。以下繼續引用以...