您的位置:首页 > 编程语言 > Python开发

python 实现堆排序

2016-10-20 15:14 246 查看
#原理:循环数组,依次构建最大堆,构建完以后第一个元素就为最大值 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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: