堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。
arr=[1,3,11,15,12,14,5]
def adjust(arr,n,i):
largest=i
l=i*2+1
r=i*2+2
#判定左子树与根节点的大小
if l<n and arr[l]>arr[i]:
largest=l
# 判定右子树与根节点和左子树较大结点的大小
if r<n and arr[r]>arr[largest]:
largest=r
if largest!=i:
# 交换结点
arr[largest],arr[i]=arr[i],arr[largest]
# 递归调整交换后的分支
adjust(arr,n,largest)
def heapsort(arr,n):
for i in range(n//2,-1,-1):
# for i in range(n // 2, -1, -1):
adjust(arr,n,i)
print(arr)
for i in range(n-1,0,-1):
arr[0],arr[i]=arr[i],arr[0]
adjust(arr,i,0)
heapsort(arr,len(arr))
print(arr)