【问题标题】:comparison of sorting algorithms排序算法比较
【发布时间】:2010-03-25 10:56:58
【问题描述】:

我们更喜欢什么时候

a) 桶排序,b) 基数排序

比较类似于

  • 冒泡排序
  • 插入排序
  • 选择排序
  • 归并排序
  • 快速排序?

【问题讨论】:

  • 当它是一个家庭作业问题时!
  • 不认真,使用桶或基数排序的动机是什么?
  • 不是完全相同的副本,但您可以在这里找到一些信息:stackoverflow.com/questions/1933759/…
  • @hash5,所有这些类型的 wiki 页面都有一个非常好的分析部分,其中包括您正在寻找的确切类型的示例

标签: algorithm sorting


【解决方案1】:

当您必须对 很多 数字(通常是适合 32 / 64 位整数的自然数)进行排序时,最好使用基数排序(如果更少,请考虑计数排序) .这是因为它更快,执行k*N 操作,其中k 是一个常数(换句话说,O(N) 时间)。对于 32 位整数,k 通常为 2 或 4。

当您必须对较小的集合进行排序时,使用基数排序及其近亲是没有意义的。在这些情况下,优化的快速排序(阅读:introsort)会更快。此外,如果您要对自定义数据类型进行排序,基数排序甚至可能无法使用,因此您别无选择,只能使用比较排序。

如果您不确定哪个更快(有时很难确定),请运行测试。始终考虑输入已经排序、反向排序和随机顺序的情况。考虑每种算法的内存需求,并据此做出选择。

【讨论】:

  • 顺便说一句,与您在删除后对答案所做的评论相关,快速排序不必“优化”即可使用 O(log N) 额外内存。只要确保你在小“一半”上递归并在大“一半”的循环中迭代,你永远不会超过 log N 级别。伪代码:while (slice.size() > 1) { (slice, otherslice) = partition(slice); if (slice.size() < otherslice.size()) { qsort(slice); slice = otherslice; } else { qsort(otherslice); } }.
  • 没错,这就是我心中的“优化”。我之所以这么称呼它是因为大多数教程/书籍实现都没有使用或提及它。
  • 我记得在我的算法课程中,我们曾经使用填充来获得 2^N 长度。
【解决方案2】:

数学家会说大多数排序在 O(n log(n)) 或 O(n²) 时间内运行,而 RadixSort 在 O(n) 时间内运行。 -source

桶排序是基数排序的表亲,具有最高到最低有效数字的味道。 - source

优点:-copied from source

  • 基数和桶排序是稳定的,保留现有的相等键顺序。

  • 与大多数其他类型不同,它们以线性时间工作。换句话说,当需要对大量项目进行分类时,它们不会陷入困境。大多数排序在 O(n log n) 或 O(n^2) 时间内运行。

  • 对每个项目进行排序的时间是恒定的,因为不进行项目之间的比较。对于其他排序,每次排序的时间随着项目数的增加而增加。

  • 当您要使用短键对大量记录进行排序时,基数排序特别有效。

【讨论】:

    【解决方案3】:

    这听起来很像一个家庭作业问题,所以我不想说太多。

    冒泡排序是一种非常简单的排序算法,它遍历列表中的所有项目,并将其与其他所有项目进行比较。这会导致很多比较,因此非常慢。

    基数排序是基于数字的排序,但你可以用数字表示任何数据,它和桶可以更快地得到结果。

    插入/选择/合并排序旨在完成这些任务。例如,在合并到列表时,如果需要对两个列表进行预排序,那么您可以使用特殊排序快速合并它们,而不是将整个列表排序为一个。如果您知道两个列表都是有序的,您只需要跟踪您在每个列表中的位置(两个索引号)并比较每个索引处的元素,并在您取出其中一个项目并移动它时将索引向上移动进入一个新列表。

    排序算法是一个巨大的计算领域,因为有很多不同的要求。我描述的合并代码很简单,但是在排序时,使用的内存加倍。你也可以让它运行得更快。也许从两端开始,跟踪两个索引,制作两个半合并的灯,一个从底部到中间,另一个从顶部到中间,然后将第二个附加到第一个......我不知道可能会更好。

    【讨论】:

      猜你喜欢
      • 2013-05-21
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多