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 平均情...