我很难找到可以给出最坏情况良好资源,而不是稳定排序算法。有人知道任何好的资源吗?
提醒一下,这意味着它使用传入的数组,并且排序算法仅允许使用恒定的额外空间。稳定意味着具有相同键的元素在排序数组中的顺序与原始数组中的顺序相同。
例如,朴素的合并排序是最坏的情况且稳定,但使用多余的空间。可以使标准的快速排序稳定,到位,但最坏的情况是。堆排序已经到位,最坏的情况是O(n \ ln n),但不稳定。 维基百科上有一张很好的图表,说明了哪种排序算法有哪些弊端。请注意,他们没有列出列出所有具有稳定性的三个条件的排序算法,最坏情况为O(n \ ln n)且处于适当状态。
我发现Katajainen,Pasanen和Teuhola撰写了一篇名为“ Practical in-place mergesort”的论文,该论文声称就地稳定的mergesortsort变种最坏的情况。如果我正确理解了它们的结果,它们将在数组的第一个和数组的后一个上递归使用(bottom-up?)mergesort,然后使用第二个作为合并的临时空间。我仍在阅读此书,因此感谢您提供有关我是否正确解释其结果的更多信息。
我也会对最坏情况进行稳定快速排序感兴趣。据我了解,将快速排序修改为最坏的情况需要选择一个适当的枢轴,这将破坏原本通常会享有的稳定性。
这纯粹是理论上的兴趣,我没有实际应用。我只想知道具有所有这三个功能的算法。