为什么“不稳定的排序”被认为是不好的

时间:2011-05-11 03:10:05

标签: algorithm sorting computer-science theory

只是想知道是否有人可以解释为什么“不稳定的排序”被认为是坏的?基本上我没有看到任何真正重要的情况。有人可以提供一个吗?

4 个答案:

答案 0 :(得分:23)

如果您有一个允许人们通过单击该列对各个列进行排序的GUI,并且您使用稳定的排序,那么知道的人可以通过单击对列A,B,C进行多列排序列C,B,A依次排列。因为排序是稳定的,当你点击B时,B下任何具有相同键的记录仍然会被C排序,所以在点击B后,记录按B,C排序。同样,在你点击A后,记录被排序由A,B,C。

(不幸的是,上次我在某些微软产品或其他产品上试过这个产品时,它似乎没有使用稳定的排序,因此这个技巧并不为人所知,这并不奇怪。)

答案 1 :(得分:4)

想象一下,你想组织一副牌。您可以先按套装排序,然后按数值排序。如果你使用稳定的排序,你就完成了。如果你使用了不稳定的排序,那么它们将按照数字顺序排列,但这些套装会再次搞砸了。实际发展问题中存在许多相同的情况。

答案 2 :(得分:3)

在少数情况下,您需要一种稳定的排序算法。这方面的一个例子是,如果你正在实现像Radix排序这样的东西,这取决于用作构建块的比较排序算法是稳定的。 (基数排序可以在线性时间内运行,但它的输入比比较排序算法更受限制。(比较排序需要O(n lg n)时间))

不稳定的那种不一定是“坏”;更重要的是,稳定的那种“在某些情况下是可取的”。这就是编程语言的原因,例如C ++的标准模板库,提供两者 - 例如std::sortstd::stable_sort - 允许您指定何时需要稳定性,何时不需要。

答案 3 :(得分:1)

因为他们可以做得比我能做得更好......来自Developer Fusion

  

有两种排序   算法:“稳定排序”和   “不稳定的种类”。这些术语指的是   两个人采取的行动   值比较相等。如果你有   一个数组T0..size有两个元素Tn   并且Tk表示n< k,和这两个   元素比较平等,稳定   排序它们将出现在已排序的   输出,其值为Tn   在Tk之前。输出顺序   保留原始输入顺序。一个   相反,不稳定的排序有   不保证这两个的顺序   输出中的元素。

请注意,快速排序等排序算法不稳定或不稳定。实施将决定它是什么。

在任何情况下,稳定不一定比不稳定更好或更差 - 只是有时你需要保证订单两个相等的元素。当需要保证时,不稳定是不合适的。