七 堆排序 HeapSort

2021-10-24 15:19:45 字數 1405 閱讀 2110

基本思想:

圖示: (88,85,83,73,72,60,57,48,42,6)

heap sort

平均時間複雜度:o(nlogn)由於每次重新恢復堆的時間複雜度為o(logn),共n - 1次重新恢復堆操作,再加上前面建立堆時n / 2次向下調整,每次調整時間複雜度也為o(logn)。二次操作時間相加還是o(n * logn)。

def

adjust_heap

(lists, i, size)

: lchild =

2* i +

1 rchild =

2* i +

2max

= i if i < size /2:

if lchild < size and lists[lchild]

> lists[

max]

:max

= lchild

if rchild < size and lists[rchild]

> lists[

max]

:max

= rchild

ifmax!= i:

lists[

max]

, lists[i]

= lists[i]

, lists[

max]

adjust_heap(lists,

max, size)

defbuild_heap

(lists, size)

:for i in

range(0

,(size/2)

)[::

-1]:

adjust_heap(lists, i, size)

defheap_sort

(lists)

: size =

len(lists)

build_heap(lists, size)

for i in

range(0

, size)[:

:-1]

: lists[0]

, lists[i]

= lists[i]

, lists[0]

adjust_heap(lists,

0, i)

七 堆排序(Heap Sort)

堆排序是一種樹形選擇排序方法,它的特點是 在排序的過程中,將array 0,n 1 看成是一顆完全二叉樹的順序儲存結構,利用完全二叉樹中雙親節點和孩子結點之間的內在關係,在當前無序區中選擇關鍵字最大 最小 的元素。若array 0,n 1 表示一顆完全二叉樹的順序儲存模式,則雙親節點指標和孩子結點指...

排序演算法之七 堆排序 Heap Sort

堆排序 heapsort 是指利用堆這種資料結構所設計的一種排序演算法。堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點。將待排序的元素序列 r1,r2 rn 構建成最大堆,此堆為初始的無序區。關於最大堆的詳細構建過程請點這裡 將最大堆的堆頂元...

排序演算法 7 堆排序(Heap Sort)

堆排序 heapsort 是指利用堆這種資料結構所設計的一種排序演算法。堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點。7.1 演算法描述 7.2 演示 7.3 實現 var len 因為宣告的多個函式都需要資料長度,所以把len設定成為全域...