Python 堆排序演算法

2021-08-03 23:02:18 字數 919 閱讀 4485

堆排序演算法:空間複雜度為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 平均情...