python实现堆排序

倾然丶 夕夏残阳落幕 提交于 2019-11-29 17:33:36

直接放代码,对堆概念模糊者请自行查询!

#python实现堆排序
def heapify(arr,n,i):
    largest=i
    left=2*i+1
    right=2*i+2
    if left<n and arr[largest]<arr[left]:
        largest=left
    if right<n and arr[largest]<arr[right]:
        largest=right
    if largest!=i:
        arr[largest],arr[i]=arr[i],arr[largest]  #python是地址引用,交换
        heapify(arr,n,largest) #下沉式调整

def heapsort(arr):
    n=len(arr)
    for i in range(n-1,-1,-1):
        heapify(arr,n,i)  #将序列构造成大根堆
    #把最大值交换到最后位置,再重新调整为堆,升序排列
    for i in range(n-1,0,-1):
        arr[i],arr[0]=arr[0],arr[i]
        heapify(arr,i,0)

arr=[3,4,1,9,6,0,23]
heapsort(arr)
for i in range(len(arr)):
    print(arr[i])
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!