python--堆排序實現(含代碼)

堆排序的原理這裏就不說了,數據結構裏好好查一查吧。

大致原理就是通過不斷地構建大根堆(小根堆),交換根節點和尾節點的值,再重複地調整堆來完成排序。

代碼如下:

import random

def MAX_Heapify(heap,HeapSize,root):#在堆中做結構調整使得父節點的值大於子節點

    left = 2*root + 1
    right = left + 1
    larger = root
    if left < HeapSize and heap[larger] < heap[left]:
        larger = left
    if right < HeapSize and heap[larger] < heap[right]:
        larger = right
    if larger != root:#如果做了堆調整則larger的值等於左節點或者右節點的,這個時候做對調值操作
        heap[larger],heap[root] = heap[root],heap[larger]
        MAX_Heapify(heap, HeapSize, larger)

def Build_MAX_Heap(heap):#構造一個堆,將堆中所有數據重新排序
    HeapSize = len(heap)#將堆的長度當獨拿出來方便
    for i in range((HeapSize -2)//2,-1,-1):#從後往前出數
        MAX_Heapify(heap,HeapSize,i)

def HeapSort(heap):#將根節點取出與最後一位做對調,對前面len-1個節點繼續進行對調整過程。
    Build_MAX_Heap(heap)
    for i in range(len(heap)-1,-1,-1):
        heap[0],heap[i] = heap[i],heap[0]
        MAX_Heapify(heap, i, 0)
    return heap

if __name__ == '__main__':
    a = [30,50,57,77,62,78,94,80,84]
    print (a)
    HeapSort(a)
    print (a)
    b = [random.randint(1,1000) for i in range(1000)]
    print (b)
    HeapSort(b)
    print (b)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章