堆排序代碼實現

array = [0,30,20,80,40,50,10,60,70,90]
# 待排序序列
# i = 4-1 或 1
# n = len(array)
total = len(array) - 1
# 調整爲大頂堆,i是指從哪個結點開始調整,n代表待排序元素總數
def adjust_heap(n,i,array):
    #length = len(array)
    #print_tree(array)
    while i * 2 <= n:
        lchild_index = 2 * i
        max_child_index = lchild_index
        if n > lchild_index and array[lchild_index + 1] > array[lchild_index]:
            max_child_index = lchild_index + 1
        if array[max_child_index] > array[i]:
            array[max_child_index],array[i] = array[i],array[max_child_index]
            i = max_child_index
        else:
            break
# 選擇從哪個結點開始排序
for i in range(4,0,-1):
    adjust_heap(len(array)-1,i,array)
# 選擇排序實現
def sort(total,array):
    while total > 1:
        array[1],array[total] = array[total],array[1]
        total -= 1
        # 特殊情況,當只剩兩元素時,直接比較,不用調整
        if total == 2 and array[1] < array[total]:
            break
        adjust_heap(total,1,array)
    return array
sort(total,array)


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