# 堆排序 def max_heap(heap,heapsize,i): # 构造最大堆(内部构建) left=2*i+1 right=2*i+2 larger=i if left<heapsize and heap[left]>heap[larger]: larger=left if right<heapsize and heap[right]>heap[larger]: larger=right if larger!=i: heap[i],heap[larger]=heap[larger],heap[i] max_heap(heap,heapsize,larger) def build_max_heap(heap): heapsize=len(heap) for i in range((heapsize-1)//2,-1,-1): max_heap(heap,heapsize,i) def heap_sort(heap): build_max_heap(heap) for i in range(len(heap)-1,-1,-1): heap[0],heap[i]=heap[i],heap[0] max_heap(heap,i,0) return heap if __name__ == '__main__': # heap=[3,50,4,29,6,5,1,200,10] heap=[6,4,5,2,3,7,1] print(heap_sort(heap))