微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

插入排序是基于优先队列的排序算法吗? 使用优先队列进行排序

如何解决插入排序是基于优先队列的排序算法吗? 使用优先队列进行排序

插入排序是基于队列的优先排序算法吗?堆排序也是基于 PQ 的吗?

解决方法

关于 Priority queue 的维基百科文章解释了优先级队列和排序算法之间的关系:

使用优先队列进行排序

优先级队列的语义自然暗示了一种排序方法:将所有需要排序的元素插入到一个优先级队列中,依次取出;它们将按排序顺序出现。这实际上是几种排序算法使用的过程,一旦优先级队列提供的抽象层被移除。这种排序方法等价于以下排序算法:

名称 优先队列实现 最佳 平均 最差
堆排序 ?log⁡(?) ?log⁡(?) ?log⁡(?)
平滑排序 莱昂纳多堆 ? ?log⁡(?) ?log⁡(?)
选择排序 无序数组
插入排序 有序数组 ?
树排序 自平衡二叉搜索树 ?log⁡(?) ?log(?) ?log(?)

所以,是的,您当然可以说 heapsort 构建了一个优先级队列(具有高效的实现)。对于插入排序,它不太明显,因为正在构建的优先级队列实际上是一个已排序的子数组。但是由于排序数组表示堆,因此插入排序也可以说是构建和使用优先级队列,但效率较低。由于队列是一个已排序的数组,因此上面引用的算法的“删除”部分对于插入排序是不必要的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。