堆排序演算法思路總結

2021-10-04 19:24:32 字數 785 閱讀 2206

堆排序(heapsort)是指利用堆這種資料結構所設計的一種排序演算法。堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。堆排序可以說是一種利用堆的概念來排序的選擇排序。分為兩種方法:

大頂堆:每個節點的值都大於或等於其子節點的值,在堆排序演算法中用於公升序排列;

小頂堆:每個節點的值都小於或等於其子節點的值,在堆排序演算法中用於降序排列;

堆排序的平均時間複雜度為 ο(nlogn)。

建立乙個堆 h[0……n-1];

把堆首(最大值)和堆尾互換;

把堆的尺寸縮小 1,並呼叫 shift_down(0),目的是把新的陣列頂端資料調整到相應位置;

重複步驟 2,直到堆的尺寸為 1。

c語言**實現

#include #include void swap(int *a, int *b) 

void max_heapify(int arr, int start, int end)

}}void heap_sort(int arr, int len)

}int main() ;

int len = (int) sizeof(arr) / sizeof(*arr);

heap_sort(arr, len);

int i;

for (i = 0; i < len; i++)

printf("%d ", arr[i]);

printf("\n");

return 0;

}

演算法總結 堆排序

在軟體設計相關領域,堆 heap 的概念主要涉及到兩個方面 堆排序的時間複雜度是o nlgn 與快速排序達到相同的時間複雜度.但是在實際應用中,我們往往採用快速排序而不是堆排序.這是因為快速排序的乙個好的實現,往往比堆排序具有更好的表現.堆排序的主要用途,是在形成和處理優先順序佇列方面.另外,如果計...

堆排序演算法 總結

最近面試,老是被問到堆排序演算法。回答時老是感覺思路不清楚,現在總結一下,把思路弄清楚的。1.堆排序是利用堆的特性對記錄序列進行排序的一種排序方法。好的那麼堆得特性是什麼呢?堆得定義 堆是滿足下列性質的數列 如下圖最開始是乙個小頂堆。當把97和13 交換後不是堆了,所以我們要調整根節點使之成為堆即篩...

堆排序演算法 總結

最近面試,老是被問到堆排序演算法。回答時老是感覺思路不清楚,現在總結一下,把思路弄清楚的。1.堆排序是利用堆的特性對記錄序列進行排序的一種排序方法。好的那麼堆得特性是什麼呢?堆得定義 堆是滿足下列性質的數列 如下圖最開始是乙個小頂堆。當把97和13 交換後不是堆了,所以我們要調整根節點使之成為堆即篩...