堆排序 python

本文介绍了如何使用Python实现大根堆(maxheap)的数据结构以及基于大根堆的堆排序算法,通过`max_root_heap`函数构造堆,`heap_sort`函数进行排序,最后在`main`函数中展示了整个过程。
摘要由CSDN通过智能技术生成
def max_root_heap(nums, s, e):
    '''
    构造大根堆
    :param nums:
    :param s: 起始索引
    :param e: 结束索引
    :return:
    '''
    for i in range(s, e + 1):
        c = 2 * i + 1
        if c < e:
            if nums[c] < nums[c + 1]:  // 保证c指向最大孩子结点
                c += 1
        elif c == e:
            pass
        else:
            break
        if nums[c] > nums[i]:  // 交换最大子结点与父结点
            nums[c], nums[i] = nums[i], nums[c]


def heap_sort(nums):
    '''
    堆排序
    :param nums: 待排序数组
    :return:
    '''
    len_nums = len(nums)
    for i in range((len_nums - 1) // 2, -1, -1):  // 构造一次大根堆
        max_root_heap(nums, i, len_nums - 1)
    for i in range(len_nums):  // 将根结点放到最后,再构造大根堆
        nums[0], nums[len_nums - 1 - i] = nums[len_nums - 1 - i], nums[0]
        for j in range(((len_nums - 1) // 2), -1, -1):
            max_root_heap(nums, j, len_nums - 1 - i - 1)


def main():
    nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5, 45, 3, 2, 65, 6, 76, 87, 8, 8, 98, 11, 31, 254, 1, 2, 544, 543, 5]
    heap_sort(nums)
    print(nums)


if __name__ == '__main__':
    main()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值