python3实现堆排序

考研人信息库

此公众号会发表计算机考研(初复试信息)、夏令营等资料,方便考研人对信息的获取,节约自身查找资料的时间,回复408,可获得数据结构、操作系统、计算机网络、计算机组成原理全科资料

把所有排序算法手动实现一遍系列,为方便回顾,记录于此

# 自上而下调整堆
def maxHeapify(arr, i, size):
    left = 2 * i + 1
    right = 2 * i + 2
    largest = i
    if left < size and arr[largest] < arr[left]:
        largest = left
    if right < size and arr[largest] < arr[right]:
        largest = right
    if largest != i:
        arr[i], arr[largest] = arr[largest], arr[i]
        maxHeapify(arr, largest, size)


# 构建一个大根堆
def buildMaxHeap(arr):
    size = len(arr)
    for i in range(size//2,-1,-1):
        maxHeapify(arr,i,size)
#堆排序
def heapSort(arr):
    if not arr:
        return
    size=len(arr)
    buildMaxHeap(arr)
    for i in range(size-1,-1,-1):
        arr[0],arr[i]=arr[i],arr[0]
        size-=1
        maxHeapify(arr,0,size)

算法测试

arr=[2,5,1,2,6,10]
size=len(arr)
heapSort(arr)
print(arr)

测试结果(大根堆得到顺序排序,小根堆得到逆序排序)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值