《算法》-排序[优先队列(堆排序)]

优先队列(堆排序)

优先队列:最重要的操作就是删除最大元素和插入元素

堆排序:堆排序对于记录较少的文件效果一般,对于文件较多还是比较有效的,最差的时间复杂度为nlog(n),属于不稳定排序

堆排序可以被认为是一种改进的选择排序:就像选择算法一样,它将输入分成已排序的和还未排序的区域,它通过提取未排序的区域内最大的元素并将其移动到已排序的区域来迭代缩小未排序的区域。堆排序相对选择排序改进的部分包括使用堆数据结构而不是线性时间的搜索来找到最大值。摘于知乎:堆排序

 

步骤:

输入:一系列的无序元素(比如说,数字)组成的输入数组A

经过:堆排序的过程可以具体分为三步,创建堆,调整堆,堆排序。

创建堆,以数组的形式将堆中所有的数据重新排序,使其成为最大堆/最小堆。

调整堆,调整过程需要保证堆序性质:在一个二叉堆中任意父节点大于其子节点。

堆排序,取出位于堆顶的第一个数据(最大堆则为最大数,最小堆则为最小数),放入输出数组B 中,再将剩下的对作调整堆的迭代/重复运算直至输入数组 A中只剩下最后一个元素。

输出:输出数组B,里面包含的元素都是A 中的但是已经按照要求排好了顺序

# python中heapq堆使用
import heapq
list = [1,2,3,5,1,5,8,9,6]
heapq.heapify(list)
print(list)

代码参考:

简书-堆排序

 

公众号:算法手记

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值