只是想知道,如果有人可以解释为什么一个“不稳定的一种”被认为是坏?基本上我没有看到任何情况下它真的很重要。任何人都可以提供一个吗?为什么是一种“不稳定的那种”认为是不好的
回答
如果你有一个图形用户界面,允许人们通过单击该列进行排序的单个列,并使用一个稳定的排序,那么谁知道人们可以列通过点击获得多列排序A,B,C在列C,B,A上依次排列。因为排序是稳定的,所以当你点击B时,在B下有相同键的任何记录仍然会被C排序,所以在点击B之后,记录按B,C排序。同样,在你点击A之后,记录被排序(不幸的是,上次我在某些微软产品或其他产品上试用过这款产品时,它看起来好像没有使用稳定的排序方式,所以这并不奇怪)。
很好的例子。但是,你的意思是说有一个微软产品不稳定?令人震惊! :) – 2011-05-11 17:15:02
很高兴我读到这个。我不会想到这样的事情不会使用可靠的排序。 – 2012-08-14 14:34:07
但是,通过添加一个rownum/index或其他类型的唯一计数器作为复合排序键中的最后一个元素,总是不能稳定排序吗?除非我错过了一些东西,否则似乎微不足道。 – drake7707 2015-02-14 15:53:14
试想一下,你想组织的一副牌。您可以先按西装排序,然后按数字值排序。如果你使用稳定的排序,你就完成了。如果你使用了不稳定的排序,那么他们会按数字顺序排序,但套装会再次混乱。有很多相同的情况出现在实际的开发问题中。
我不认为这是一个很好的比较,因为任何比较函数都应考虑套装和数量。还要注意,如果你使用稳定的排序方法,你必须按数字排序,然后适合,但不是其他方式。 – 2011-05-11 03:15:40
我不是跟着你,@比利。首先,如果且没有稳定的排序,您需要一个比较函数来考虑这两个因素。否则,你可以有一个简单的比较函数,它在动态语言中可以一般地写成按名称排序。其次,你似乎觉得只有一种方法来组织一副牌。我向你保证,“组织”可以用多种方式来解释。 – 2011-05-11 04:02:33
只是有你需要一个排序算法这是稳定的少数情况下。一个例子就是如果你正在实现一个基类排序,这取决于用作构建块的比较排序算法是稳定的。 (基数排序可以在线性时间内运行,但其输入比比较排序算法更受限制(比较排序需要O(n lg n)时间))
不一定不稳定的排序是“不好” ;更多的是稳定的那种“在某些情况下是可取的”。这就是编程语言的原因,例如C++的标准模板库,提供 - 例如std::sort
和std::stable_sort
- 可让您指定何时需要稳定性,何时不需要。
因为他们可以做得比我能做的......从Developer Fusion:
有两种排序算法0:“稳定排序”和 “不稳定排序”。这些术语是指当两个 的值相等时所采取的操作 。如果你有 数组T0..size有两个元素Tn的 和Tk对于n < K,和这两个元素 比较平等,稳定 排序它们将出现在与在Tn的价值排序 输出在Tk之前的 。输出订单 保留原始输入订单。一个 不稳定排序,相比之下,有 没有输出这两个 元素的顺序的保证。
需要注意的是,如快速排序排序算法并不稳定或不稳定。实施将决定它是哪一个。
在任何情况下,稳定不一定比不稳定好还是坏 - 它只是有时你需要的顺序的两个相等的元素的保证。当你做需要保证时,不稳定将不适合。
我想OP理解这两种排序之间的区别是什么。他在问为什么一种不稳定的东西会是“坏的” - 这意味着他知道是什么使得一种不稳定的东西。 – 2011-05-11 03:23:07
@比利 - 非常真实。我想,为了更好的回答,我想明确说明它是什么,所以我可以说我的最后一段 - 除了特定情况下,其中一段不一定是“坏”或“好”。 – JasCav 2011-05-11 03:24:36
- 1. 为什么这不是那种方式?
- 2. 您是否认为ASP.NET WebForms是一种不好的做法?
- 3. 为什么这不被认为是一种功能?
- 4. 为什么我的按钮不是我说的那种颜色?
- 5. Javascript为什么FOR IN是一种不好的做法?
- 6. 为什么不是这种尾递归?
- 7. 为什么把magic_quotes_gpc视为一种不好的做法?
- 8. 这种接口设计会被认为是不好的?
- 9. 为什么Rails认为Model属性是一种方法?
- 10. 为什么REST是一种建筑风格而不是建筑?
- 11. 为什么第一种方法是promisifying工作而不是第二种?
- 12. 为什么在bean中创建受保护的属性被认为是一种不好的做法?
- 13. 为什么在这段代码中长度不被认为是一种方法?
- 14. 为什么heapsort不稳定?
- 15. 为什么变量在这种情况下是不确定的?
- 16. 为什么有两种相同类型的xmls,一种不是反序列化,另一种是?
- 17. 为什么在HTML中使用onClick()是一种不好的做法?
- 18. 为什么从javascript连接SQL数据库是一种不好的做法?
- 19. 为什么'post'是Dataflow.TransformBlock的一种方法?不编译
- 20. 为什么__NSCFDictionary不是一种类的NSDictionary
- 21. 为什么不是默认
- 22. 为什么交换只有一种方式,而不是另一种方式?
- 23. 为什么此SQL以一种格式工作,但不是另一种?
- 24. 为什么名称形成一种而不仅仅是一种类型?
- 25. 为什么$在cakePHP中被认为是不好的做法?
- 26. 为什么before_save被认为是不好的?
- 27. Firefox认为<fieldset>是一种表单元素; Chrome不是
- 28. 为什么这个JavaScript是线是正确的,另一种是不
- 29. 什么是最好的R树变种
- 30. 保持交易开放被认为是一种不好的做法?
谁认为它“不好”?你有报价或参考或链接?这将有助于为这种价值判断提供一些背景。 – 2011-05-11 03:18:51
可能的重复[有什么好处排序算法是稳定的?](http://stackoverflow.com/questions/808617/what-is-the-benefit-for-a-sort-algorithm-tobe - 稳定) – nawfal 2014-06-13 15:59:47