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)
堆排序代碼實現
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.