关于堆排序的详细讲解过程,见:http://www.cnblogs.com/MOBIN/p/5374217.html
下面是python 实现:
def max_head(mylist, headsize, root_index):
left = root_index*2+1
right =root_index*2+2
large_index = root_index
if left < headsize and mylist[left] > mylist[large_index]:
large_index = left
if right < headsize and mylist[right] > mylist[large_index]:
large_index =right
if large_index != root_index:
mylist[large_index], mylist[root_index] =mylist[root_index], mylist[large_index]
max_head(mylist, headsize, large_index)
def create_head(mylist):
length = len(mylist)
max_child_index = (length - 2)//2
for i in range(max_child_index, -1, -1):
max_head(mylist, length, i)
def sort_head(mylist):
create_head(mylist)
for i in range(len(mylist)-1,-1,-1):
mylist[0], mylist[i] = mylist[i], mylist[0]
max_head(mylist, i, 0)
if __name__== "__main__":
mylist = [49,38,65,97,76,13,27,49]
sort_head(mylist)
print mylist