我正在为数据结构类进行编码分配。我基本上必须实现不同的排序算法(选择排序,快速排序等)并比较运行时间。
但是,在指令中,它说我必须实现两种不同的堆排序算法。这是说明:
堆排序,而不使用“堆初始化”(即,将数字重复插入 最初是空的堆)
使用堆初始化的堆排序
在这里,我不确定堆初始化是什么意思。我试图用Google搜索它,但是找不到任何可以很好解释的资源。通过/不使用堆初始化实现堆排序是什么意思?
我正在用Java编写代码以供参考!
谢谢
答案 0 :(得分:5)
区别在于您如何获得初始堆。
https://en.wikipedia.org/wiki/Binary_heap(正在构建堆部分)。
存在William的方法,您可以将元素一个接一个地插入到堆中(最初是空的)。这是O(NlogN)。这是未初始化的版本。
有Floyd的版本,您可以在其中获取数组并进行一些交换以使其成为堆。这将是O(N)(有关数学信息,请查看维基百科)。伪代码可在Wikipedia上获得。
总体复杂度是由提取过程O(NlogN)驱动的。