#!/usr/bin/python def Heapsort(lis): #建堆 for i in range(len(lis)//2-1,-1,-1): adjustHeap(lis,i,len(lis)) #将根元素和最后一个元素互换,然后将剩下的元素排列成堆 for j in range(len(lis)-1,0,-1): swap(lis,0,j) adjustHeap(lis,0,j) #堆调整代码 def adjustHeap(lis,i,j): temp = lis[i] k = 2*i+1 while k < j: if k+1 < j and lis[k] < lis[k+1]: k +=1 #这里不用一个个交换,我们只要记录好初始的lis[i],最后把lis[i]放到最后确定位置就行 if lis[k] > temp : lis[i] = lis[k] i = k else: break #如果有发生交换,交换后的子树也可能需要调整 k = k*2+1 lis[i] = temp def swap(lis,i,j): temp = lis[i] lis[i] = lis[j] lis[j] = temp #主程序代码: lis = [5,4,3,2,1] Heapsort(lis) print(lis)