def buildMaxHeap(arr):
import math
for i in range(math.floor(len(arr)/2),-1,-1): #倒序
heapify(arr,i)
def heapify(arr,i):
left=2*i+1
right=2*i+2
largest=i
if left<arrLen and arr[left]>arr[largest]:
largest=left
if right<arrLen and arr[right]>arr[largest]:
largest=right
if largest!=i:
swap(arr,i,largest) #交换顺序
print(arr)
heapify(arr,largest) #
def swap(arr,i,j):
arr[i],arr[j]=arr[j],arr[i]
def heapSort(arr):
global arrLen
arrLen=len(arr)
buildMaxHeap(arr)
for i in range(len(arr)-1,0,-1):
swap(arr,0,i)
arrLen-=1
heapify(arr,0)
return arr
if __name__=='__main__':
L=[53,23,45,24,1,32,66,74,34]
#print(sort_jishu(L))
print(heapSort(L))
堆排序算法
于 2019-11-20 19:38:31 首次发布