排序算法————堆排序

基本原理

堆可以看成一顆完全二叉樹,這課完全二叉樹的任何一個非葉節點的值都大於(或不小於)其左右孩子結點的值。

應用場景:

設有5000個元素,希望用最快的速度挑選出前10個最大的,採用堆排序方法最好。

因爲堆排序不必將整個序列排序即可確定前若干個最大(或最小)元素。

 

大頂堆:堆頂的元素值最大,並且每棵子樹都是一個大頂堆。(降序)

小堆頂:堆頂的元素值最小,並且每棵子樹都是一個小頂堆。(升序)

大頂堆排序步驟

原始序列:49  38  65  97  76  13  27  49

一、建堆

1、構建原始序列對應的完全二叉樹

2、從下向上檢查調整樹結構。

(1)檢查97,發現它和的孩子滿足堆定義,故不需要調整。

(2)檢查65,發現它和的孩子滿足堆定義,故不需要調整。

(3)檢查38,發現38<97,38<76,不滿足堆定義,故需要調整。

因此,將38和97交換。交換後38成了49的根節點,49>38,不滿足堆定義,需要繼續調整

將38和49交換。

(4)檢查49,49<97,49<65不滿足堆定義,需要調整,將49和97交換,交換後49<76仍不滿足堆定義,

繼續調整將49與76交換。

3、排序

至此,已經建立好了一個大頂堆。對應的序列爲

97  76  65  49  49  13  27  38

第一趟堆排序完成,97到達其最終位置。

然後繼續交換堆頂元素與當前末尾元素,反覆執行調整+交換步驟,直到整個序列有序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章