如何解决插入排序是基于优先队列的排序算法吗? 使用优先队列进行排序
插入排序是基于队列的优先排序算法吗?堆排序也是基于 PQ 的吗?
解决方法
关于 Priority queue 的维基百科文章解释了优先级队列和排序算法之间的关系:
使用优先队列进行排序
优先级队列的语义自然暗示了一种排序方法:将所有需要排序的元素插入到一个优先级队列中,依次取出;它们将按排序顺序出现。这实际上是几种排序算法使用的过程,一旦优先级队列提供的抽象层被移除。这种排序方法等价于以下排序算法:
名称 | 优先队列实现 | 最佳 | 平均 | 最差 |
---|---|---|---|---|
堆排序 | 堆 | ?log(?) | ?log(?) | ?log(?) |
平滑排序 | 莱昂纳多堆 | ? | ?log(?) | ?log(?) |
选择排序 | 无序数组 | ?² | ?² | ?² |
插入排序 | 有序数组 | ? | ?² | ?² |
树排序 | 自平衡二叉搜索树 | ?log(?) | ?log(?) | ?log(?) |
所以,是的,您当然可以说 heapsort 构建了一个优先级队列(具有高效的实现)。对于插入排序,它不太明显,因为正在构建的优先级队列实际上是一个已排序的子数组。但是由于排序数组表示堆,因此插入排序也可以说是构建和使用优先级队列,但效率较低。由于队列是一个已排序的数组,因此上面引用的算法的“删除”部分对于插入排序是不必要的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。