#原理:循环数组,依次构建最大堆,构建完以后第一个元素就为最大值 swap 到最后一个位置,
#继续对 数组中 0~ last-1 这个新数组构建最大堆 依次类推 到最后构建完成
arr = [55, 67, 89, 12, 4, 6, 2, 34, 33, 12]
arrLen = int(len(arr))
#调整三个元素堆
def adjustThreeH(arr,p,length):
l = 2*p+1
r = 2*p+2
maxV = arr[p]
if l<=length and maxV<arr[l]:
maxV = arr[l]
arr[l] = arr[p]
arr[p] = maxV
if r <=length and maxV<arr[r]:
maxV = arr[r]
arr[r] = arr[p]
arr[p] = maxV
#调整最大堆
def adjustMaxH(length):
indexI =int(length/2)-1
while indexI>=0:
adjustThreeH(arr,indexI,length-1)
indexI-=1
temp = arr[length-1]
arr[length-1] = arr[0]
arr[0] = temp
indexO = 0
while indexO<arrLen:
adjustMaxH(arrLen-indexO)
indexO+=1
print(arr)
python 实现堆排序
最新推荐文章于 2020-11-28 15:37:46 发布