121得票12回答
快速排序与堆排序

快速排序和堆排序都是原地排序算法。哪个更好?在什么应用场景下,两者中的哪一个更受青睐?

76得票5回答
为什么不总是使用堆排序

堆排序算法的最坏情况时间复杂度似乎是O(nlogn),并且在排序操作中使用O(1)空间。这似乎比大多数排序算法要好。那么为什么不总是使用堆排序作为排序算法呢(人们为什么会使用归并排序或快速排序等排序机制)? 此外,我见过人们在堆排序中使用术语“不稳定”。这意味着什么?

53得票6回答
快速排序相对于堆排序的优越性

堆排序的最坏时间复杂度是O(nlogn),而快速排序的时间复杂度为O(n^2)。 但实际证据表明,快速排序更优秀。为什么呢?

43得票7回答
堆排序的直观理解是什么?

我在学校学习Java中的排序算法,我的作业是堆排序。我读了很多资料,尽力理解,但似乎无法掌握概念。 我不要求你为我编写Java程序,如果您能尽可能简单地向我解释堆排序如何工作,那就太好了。

42得票6回答
为什么堆排序不稳定?

我在尝试理解为什么堆排序不稳定。 我已经搜索过了,但没有找到一个好的、直观的解释。 我理解稳定排序的重要性——它允许我们基于多个关键字进行排序,这可能非常有益(即,进行多次排序,每次基于不同的关键字。由于每次排序都会保留元素的相对顺序,因此之前的排序可以累加起来,给出一个按多个标准排序的最终...

40得票9回答
纯函数式编程语言中高效堆的实现

作为Haskell练习,我正尝试实现堆排序。在命令式语言中,堆通常是以数组形式实现的,但在纯函数式语言中,这种方式会非常低效。因此,我研究了二叉堆,但是到目前为止,我找到的所有资料都是从命令式视角描述它们,所呈现的算法难以转换为函数式环境。如何在像Haskell这样的纯函数式语言中高效地实现堆...

37得票4回答
最大/最小堆树能够包含重复的值吗?

我想知道最大堆或最小堆树是否允许具有重复的值?我尝试了在线资源,但未能找到相关信息。

18得票3回答
堆排序的下界是多少?

众所周知,堆排序的最坏运行时间是Ω(n lg n),但我不太明白为什么会这样。特别是,堆排序的第一步(创建最大堆)需要时间Θ(n)。然后进行n次堆删除操作。我明白为什么每次堆删除操作的时间复杂度为O(lg n);重新平衡堆需要进行冒泡操作,该操作在树高为h时需要O(h)...

13得票7回答
堆排序:如何进行排序?

我正在尝试用Python实现堆排序,但是好像做不对。我试着按照这个伪代码实现,但我的代码没有排序!它只是到了荒谬的效果。我倾向于认为问题出在这一行: 将堆的根(最大值)与堆的最后一个元素交换 我该如何获取最大值? 这是我的代码:def my_heap_sort(sqc): ...

13得票6回答
可中断的原地排序算法

我需要用C语言编写一个排序程序,并希望能够原地排序以节省磁盘空间。这是有价值的数据,因此我需要确保如果进程被中断(使用ctrl-c),文件不会损坏。我可以保证机器的电源线不会被拔掉。 额外的细节:文件大小约为40GB,每个记录为128位,机器为64位,操作系统为POSIX。 您有什么关于完...