为新手排序算法

时间:2012-01-09 15:24:57

标签: sorting

所以,.Net和Java已经破坏了我“不需要”学习任何排序算法,但是现在我需要用不同的语言对数组进行排序而没有这种奢侈。我能够轻松搞定泡泡分拣。然而,一些消息来源厌恶使用气泡分类,因为在n ^ 2比较的平均和最差情况下可怕的性能。冒泡排序似乎可以完成工作,但是关于解决一个拥有+100,000个元素的数组并让我担心在这个程度上性能可能是一个问题。另一方面,其他一些算法在复杂性方面看起来非常令人生畏。我的问题是,在更好的性能方面对泡沫排序有什么好的跟进,但在实施中不会陷入复杂的荒地?

作为附注,我是一名分析员,根据需要,而不是CS专业。毋庸置疑,我的编程专业知识中还有一些漏洞。谢谢:))

2 个答案:

答案 0 :(得分:1)

many options,每个都有自己的权衡。正如您所发现的,冒泡排序的折衷是(a)简单,但(b)即使是远程大型阵列也很慢。

  • Quicksort很好,但您可能会遇到内存问题。
  • 我使用Heapsort取得了很大的成功,但并不能保证稳定(尽管我从未遇到过问题)。
  • Bogosort实施和讨论很有趣,但完全不切实际。
  • 等......

充分了解要排序的数据有助于确定哪种算法最佳。例如:

  • 阵列有多大?
  • 是否有机会对其进行排序或部分排序?
  • 数组包含哪种数据?
  • 比较阵列中的两个元素有多困难/昂贵?
  • 确定数组是否排序有多困难/昂贵?
  • 等......

没有一种排序算法比其他算法更好。选择适合您需求的东西是您随着时间的推移和实践而选择的。

答案 1 :(得分:0)

花点时间学习Quicksort,这是一个很好的算法,如果你走得慢的话也不会那么复杂。

如果你想要一些排序算法只是为了让你的脚湿透(我),我会建议插入排序和选择排序,它们通常比冒泡排序更好,并且快速理解和实施。合并排序在算法课程中也很常见。您可以更好地使用快速排序。

如果您还没有,您还应该了解稳定和非稳定排序之间的区别。稳定的排序不会改变具有相同键的项目的顺序,而非稳定的排序则可以。