有哨兵的情况 ,小根堆 def HeapAdjust(arr,s,m): temp=arr[s] j=2*s while j<=m: if j<m and arr[j]>arr[j+1]: j+=1 if temp<arr[j]: break arr[s]=arr[j] s=j j*=2 arr[s]=temp 有哨兵的情况 ,大根堆 def HeapAdjust(arr,s,m): temp=arr[s] j=2*s while j<=m: if j<m and arr[j]<arr[j+1]: j+=1 if temp>arr[j]: break arr[s]=arr[j] s=j
j*=2 arr[s]=temp def HeapSort(arr): length=len(arr) i=(length-1)//2 while i>0: HeapAdjust(arr,i,length-1) i-=1 k=length-1 while k>1: swap(arr,1,k) HeapAdjust(arr, 1, k-1) k-=1