实现排序和/或搜索算法 - 在哪里以及为什么

时间:2009-04-07 11:58:02

标签: algorithm language-agnostic sorting

我偶尔会遇到手动实现的排序和/或搜索算法,而不是使用语言实现的算法。我一直在研究的大多数源代码都是用Java,C#或PHP编写的 - 但我猜这种现象与语言无关。

关于列表等常规数据结构;为什么以及在哪里实现自己的算法?思想原因?内存效率更高?不能忍受使用内置功能的想法? Java最好使用mergesort(在Collections.sort()中),当你将它与quicksort作为例子进行比较时会有一些开销。如果您有定期使用的常用任务,我们非常欢迎您以您选择的语言提交它!

4 个答案:

答案 0 :(得分:6)

  • 并非所有排序算法都由标准库实现。
  • 并非每种语言都支持通用数据类型/容器
  • 有时您需要根据数据大小在排序算法之间切换
  • 为特定输入集调整算法更容易
  • 测量处理器速度
  • 课程作业
  • 只是为了好玩

这些只是其中一些原因......

答案 1 :(得分:3)

<强> BOGO排序

while (!is_sorted(array)) {
    randomly_shuffle(array);
}

预计运行时间:O(n!)

:)

答案 2 :(得分:1)

内置语言实现通常会更快,但前提是您要以标准方式进行排序/搜索。一旦你做了一些不寻常的事情,无论是解释键的方式,处理多个指针,挂钩到不同的环境等等,你可以通过调整基本例程来满足你的确切要求,从而获得更好的性能。

例如,我需要保留三个在同一个键上排序的大(大)数据集,因此我不得不返回源代码并更改C快速排序代码以在三个不同的数据数组上移动元素。

答案 3 :(得分:1)

在C ++中,您可以拥有一个内部有数组的容器,只能通过容器的方法进行搜索。你可以使用一些库实现,但是你必须提供一个比较器类,并且只需编写一个for()循环就可以获得相同数量的代码。为什么要为这种情况生成一个新实体(比较器类)?