【问题标题】:Real world examples to decide which sorting algorithm works best决定哪种排序算法效果最好的真实世界示例
【发布时间】:2012-06-16 21:01:03
【问题描述】:

我冒着在得到答案之前关闭这个问题的风险,但我真的很想知道答案。就这样吧。


我目前正在尝试学习算法,我开始理解它,但无法与之相关。

我了解时间复杂度空间复杂度。我也确实了解一些基于伪代码的排序算法

排序算法,如

  1. 冒泡排序
  2. 插入排序
  3. 选择排序
  4. 快速排序
  5. 合并排序
  6. 堆排序(一些)

我也知道 Best CaseWorst Case 情景(平均情况不多)。


一些网上相关的参考资料

  • Nice place 以图形方式显示以上所有内容。
  • This 也给了我很好的理解。

但我的问题是 - 谁能给我真实世界的例子,这些排序算法是在哪里实现的。

【问题讨论】:

  • 感谢您的回复,但能否请您提供真实的例子,例如视频流数据排序,在超过 500 万人的电话目录记录中搜索名字以 K 开头的人的地址。

标签: algorithm sorting time-complexity space-complexity


【解决方案1】:

随着元素数量的增加,您将使用更复杂的排序算法。后来的排序技术具有更高的初始开销,因此您需要大量元素来排序以证明该成本是合理的。如果您只有 10 个元素,冒泡排序或插入排序将比合并排序或堆排序快得多。

对于电视遥控器或手机等较小的嵌入式设备,空间复杂性非常重要。您没有足够的空间在这些设备上执行诸如堆排序之类的操作。

数据库使用外部合并排序来对太大而无法完全加载到内存中的数据集进行排序。这种类型的驱动因素是磁盘 I/O 数量的减少。

Good bubble sort discussion,还有许多其他因素会导致时间和空间复杂性。

Sorting-Algorithms.com

【讨论】:

  • 感谢您的回复,所以在现实世界的场景中永远不必使用冒泡排序或插入排序?
  • 如果您知道要排序的项目不多,最好使用冒泡排序或插入排序。我编写了一个使用 MIPS 处理器的电视遥控器,并使用冒泡排序对最长观看时间的频道进行排序。只有100个频道。此外,如果您知道元素处于接近排序的顺序,则冒泡排序很好,因为它的完成速度比 n/2 遍的平均情况要快得多。
  • 谢谢贾斯汀,你想把它(冒泡排序部分)编辑到你的结果中吗?我将此标记为答案。
【解决方案2】:

一个例子是 C++ STL 排序

正如wikipedia page 所说:

例如,GNU 标准 C++ 库使用混合排序 算法:首先执行 introsort,最大深度由下式给出 2×log2 n,其中 n 是元素的数量,后跟插入 对结果进行排序。1无论实现如何,复杂性 平均应该是 O(n log n) 次比较。[2]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-23
    • 2016-11-26
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多