堆排序演算法:空間複雜度為o(1),時間複雜度為o(nlogn),演算法不穩定,不具有適應性
1、構造初始堆:對所有的非葉子節點進行篩選(小頂堆向下篩選,大頂堆向上篩選)
2、進行堆排序:交換堆頂和最後乙個元素,最後乙個元素為有序區,剩下的為無序區,調整無序區,變成堆之後,
堆無序區交換堆頂和最後乙個元素,以此類推
演算法的穩定性是指:對於待排序的序列中,相同項的原來次序不能被改變
演算法的適應性是指:演算法因原序列有序而更高效
def heap_sort(lst):
def siftdown(lst, e, begin, end):
i, j = begin, begin * 2 + 1
while j < end:
if j + 1 < end and lst[j + 1] < lst[j]:
j += 1
if e < lst[j]:
break
lst[i] = lst[j]
i, j = j, 2 * j + 1
lst[i] = e
end = len(lst)
for i in range((end)//2, -1, -1):
siftdown(lst, lst[i], i, end)
print 'lst: ', lst
for i in range((end - 1), 0, -1):
e = lst[i]
print e
lst[i] = lst[0]
print 'lst1: ', lst
siftdown(lst, e, 0, i)
print 'lst2: ', lst
print '***'
print 'lst3: ', lst
python堆排序演算法 Python 堆排序
python 堆排序 堆排序 heapsort 是指利用堆這種資料結構所設計的一種排序演算法。堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點。堆排序可以說是一種利用堆的概念來排序的選擇排序。largest i l 2 i 1 left 2 i...
經典排序演算法 堆排序(python)
堆排序是指利用堆 最大堆 最小堆 這種資料結構所設計的一種排序演算法。其中堆是一種完全二叉樹的結構,並滿足子結點的鍵值或索引總是小於 或者大於 它的父結點。用最大堆排序的基本思想 堆排序從最大堆的頂部不斷取走堆頂元素放到有序序列中,直到堆的元素被全部取完。演算法過程 1 建堆 從len 2到第乙個節...
Python排序演算法之堆排序
step1 構建堆 從最後乙個非葉子結點開始向下調整,使其成為乙個堆 step2 挨個出數 堆構建完後,得到堆頂,即為最大的元素 1 將堆頂和堆的最後乙個元素互換 2 再使用向下調整,使其成為乙個新堆 3 調整完成後,得到第二大的元素 4 從 1 開始重複,直到堆為空最壞情況 o nlogn 平均情...