你什么时候实施自己的排序算法?

时间:2011-04-29 22:31:23

标签: c# .net vb.net sorting

如果这是一个愚蠢的问题,请原谅我....但我想回到我的Comp。科学。课程和我清楚地记得在几种排序算法和相应的“大O”符号上学习/被测验。

但是,在课堂之外,我从未真正编写代码进行排序。

当我从数据库获得结果时,我使用'Order By'。否则,我使用实现排序的集合类。我实施 IComparable 以允许排序;但我从未超越过那个。

对于那些没有实现语言/框架的人来说,排序总是只是一种学术追求吗?或者只是在现代硬件上运行的现代语言让人担心这个细节?

最后,当我在List(Of String)上调用.Sort时,例如,在引擎盖下使用了什么类型的算法?

10 个答案:

答案 0 :(得分:5)

虽然您很少需要实施排序算法,但了解不同的算法及其复杂性可能有助于您解决更复杂的问题。

  

最后,当我在List(Of String)上调用.Sort时,例如,在引擎盖下使用了什么类型的算法?

Quick Sort

答案 1 :(得分:3)

自从我在大学学习CS课程以来,我从未实施过自己的排序算法,如果我甚至考虑自己编写自己的课程,我首先要检查我的头部。

List<T>根据MSDN文档使用Quicksort:

http://msdn.microsoft.com/en-us/library/b0zbh7b6.aspx

答案 2 :(得分:2)

如果您使用的是高级语言,则可能无法实现自己的排序算法......

你在课堂上学到的只是告诉你大O(omicron)符号的存在和重要性。

在那里让你知道优化始终是编程的目标,当你编写代码时,你必须始终考虑它将如何执行。

它告诉你,如果在编码开始之前没有进行分析/优化,循环和递归内的循环可能会导致严重的性能问题。

以前检查您的设计并能够估算执行速度是一种指导。

答案 3 :(得分:2)

程序员必须知道这些算法是如何工作的。一个原因是,在某些情况下,某些算法更好,但排序很少是瓶颈。

在某些框架中,.Sort函数使用各种方法,具体取决于具体情况。

答案 4 :(得分:1)

  1. 在现代硬件上运行的现代语言令人担心,除非分析器显示排序是代码的瓶颈。
  2. 根据this,List.Sort使用Array.Sort,它使用QuickSort。

答案 5 :(得分:1)

国际海事组织,这已经成为一种学术活动。您需要了解算法的复杂性,并且排序是一个很好的例子,因为您可以轻松查看结果并计算不同的复杂性。然而,在现实生活中,几乎可以肯定的是,如果你试图自己动手,那么你可以更快地对你的范围进行排序。

我不知道.Net库为他们的defualt实现使用了什么,但我猜它是Quicksort或Shellsort。我有兴趣知道它是否是别的东西。

答案 6 :(得分:1)

我偶尔必须编写自己的排序方法,但只有在我编写一个相对不成熟且功能不足的平台时(例如Windows CE中的.Net 1.1或嵌入式java或某些东西)。

在类似于现代计算机的任何东西上,最好的排序算法是T-SQL中的ORDER BY子句。

答案 7 :(得分:1)

实现自己的排序是为了深入了解算法如何工作,权衡取舍,哪些经过验证的方法可以有效地解决各种各样的问题等等。

正如Darin Dimitrov的回答所述,图书馆排序例程需要具有非常有竞争力的平均案例表现,因此通常选择快速排序。

答案 8 :(得分:1)

  

对于那些没有实现语言/框架的人来说,排序总是只是一种学术追求吗?或者只是在现代硬件上运行的现代语言让人担心这个细节?

即使您没有实现自己的例程,您也可能知道如何安排数据,并且可能想要选择合适的库算法。例如,请参阅近似排序数据的this discussion

答案 9 :(得分:-2)

我认为有时您需要自定义排序方法。 如果你想按汽车制造排序,但不按字母顺序排序怎么办? 例如,你有一个制造商的数据库:本田,雷克萨斯,丰田,讴歌,日产,英菲尼迪

如果您使用普通排序,您可以获得订单:Acura,Ford,Honda,Hyundai,Lexus,Toyota

如果您想根据汽车公司的标准和豪华级别对它们进行分类,该怎么办?雷克萨斯,丰田,本田,讴歌,日产,英菲尼迪。

如果是这种情况,我认为您需要自定义排序方法。