在過去的6個小時裏,我一直在閱讀關於構建heapsort的教程和學術資料。我終於在Python中對一些整數列表進行了原型化。但是,我不完全確定我的解決方案是否構成有效的堆排序。這是一個非常簡單的解決方案,絕對可以改進,但我想知道它是否有效。令人困惑的是,每個人似乎都有自己的'首選'實現這種算法的方式。這是一個有效的堆排序?
非常感謝提前。
def heapsort(array):
array = heapify(array)
array = insert(array, 9999)
print(array)
def heapify(array):
end = len(array)
i = 0
j = 0
while i < end:
while j < end:
if array[i] > array[j]:
array = swap(array, i, j)
j += 1
i += 1
j = i
return array
def insert(array, x):
array.append(x)
return heapify(array)
def swap(array, a, b):
temp = array[a]
array[a] = array[b]
array[b] = temp
return array
def main(array):
heapsort(array)
if __name__ == '__main__':
array = [3, 1, 2, 4, 6, 7, 9, 0]
main(array)
「但我想知道它是否有效。」 - 用測試數據運行它! (包括上升/下降,隨機,小集合,大集合),但這不會證明它是正確的,它至少會顯示任何明顯的缺陷。 –
'def swap(array,a,b):array [a],array [b] = array [b],array [a]' – Veedrac
請注意Python有一個heapq模塊可以測試。 – Veedrac