大顶堆进行升序排序的python实现
#!/usr/bin/env python # -*- coding: utf-8 -*- # 将前l个节点构成的树的第i个节点调整为大顶堆 # base 1 def heap_adjust(lists,i,l): left,right=2*i-1,2*i max=i-1 if left<l and lists[max]<lists[left]: max=left if right<l and lists[max]<lists[right]: max=right if max!=i-1: lists[max],lists[i-1]=lists[i-1],lists[max] heap_adjust(lists,max+1,l) #子树有可能变成非大顶堆了,继续调整 def heap_sort(lists): # 将lists调整成一个大顶堆 for i in range(len(lists)/2,0,-1): heap_adjust(lists,i,len(lists)) for i in range(len(lists),0,-1): lists[0], lists[i - 1] = lists[i - 1], lists[0] #将堆顶记录和当前未经排序子序列的最后一个记录交换 heap_adjust(lists,1,i-1); #将lists[1...i-1]重新调整为大顶堆 lists=[int(x) for x in raw_input().split()] heap_sort(lists) print lists