python堆排序演算法 Python 堆排序

2021-10-12 11:39:03 字數 848 閱讀 2300

python 堆排序

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

largest = i

l = 2 * i + 1     # left = 2*i + 1

r = 2 * i + 2     # right = 2*i + 2

if l 

largest = l

if r 

largest = r

if largest != i:

arr[i],arr[largest] = arr[largest],arr[i]  # 交換

heapify(arr, n, largest)

def heapsort(arr):

n = len(arr)

# build a maxheap.

for i in range(n, -1, -1):

heapify(arr, n, i)

# 乙個個交換元素

for i in range(n-1, 0, -1):

arr[i], arr[0] = arr[0], arr[i]   # 交換

heapify(arr, i, 0)

arr = [ 12, 11, 13, 5, 6, 7]

heapsort(arr)

n = len(arr)

print ("排序後")

for i in range(n):

print ("%d" %arr[i]),

執行以上**輸出結果為:排序後

Python 堆排序演算法

堆排序演算法 空間複雜度為o 1 時間複雜度為o nlogn 演算法不穩定,不具有適應性 1 構造初始堆 對所有的非葉子節點進行篩選 小頂堆向下篩選,大頂堆向上篩選 2 進行堆排序 交換堆頂和最後乙個元素,最後乙個元素為有序區,剩下的為無序區,調整無序區,變成堆之後,堆無序區交換堆頂和最後乙個元素,...

經典排序演算法 堆排序(python)

堆排序是指利用堆 最大堆 最小堆 這種資料結構所設計的一種排序演算法。其中堆是一種完全二叉樹的結構,並滿足子結點的鍵值或索引總是小於 或者大於 它的父結點。用最大堆排序的基本思想 堆排序從最大堆的頂部不斷取走堆頂元素放到有序序列中,直到堆的元素被全部取完。演算法過程 1 建堆 從len 2到第乙個節...

Python排序演算法之堆排序

step1 構建堆 從最後乙個非葉子結點開始向下調整,使其成為乙個堆 step2 挨個出數 堆構建完後,得到堆頂,即為最大的元素 1 將堆頂和堆的最後乙個元素互換 2 再使用向下調整,使其成為乙個新堆 3 調整完成後,得到第二大的元素 4 從 1 開始重複,直到堆為空最壞情況 o nlogn 平均情...