如果这是一个愚蠢的问题,请原谅我....但我想回到我的Comp。科学。课程和我清楚地记得在几种排序算法和相应的“大O”符号上学习/被测验。
但是,在课堂之外,我从未真正编写代码进行排序。
当我从数据库获得结果时,我使用'Order By'。否则,我使用实现排序的集合类。我已实施 IComparable 以允许排序;但我从未超越过那个。
对于那些没有实现语言/框架的人来说,排序总是只是一种学术追求吗?或者只是在现代硬件上运行的现代语言让人担心这个细节?
最后,当我在List(Of String)上调用.Sort时,例如,在引擎盖下使用了什么类型的算法?
答案 0 :(得分:5)
虽然您很少需要实施排序算法,但了解不同的算法及其复杂性可能有助于您解决更复杂的问题。
最后,当我在List(Of String)上调用.Sort时,例如,在引擎盖下使用了什么类型的算法?
答案 1 :(得分:3)
自从我在大学学习CS课程以来,我从未实施过自己的排序算法,如果我甚至考虑自己编写自己的课程,我首先要检查我的头部。
List<T>
根据MSDN文档使用Quicksort:
答案 2 :(得分:2)
如果您使用的是高级语言,则可能无法实现自己的排序算法......
你在课堂上学到的只是告诉你大O(omicron)符号的存在和重要性。
在那里让你知道优化始终是编程的目标,当你编写代码时,你必须始终考虑它将如何执行。
它告诉你,如果在编码开始之前没有进行分析/优化,循环和递归内的循环可能会导致严重的性能问题。
以前检查您的设计并能够估算执行速度是一种指导。
答案 3 :(得分:2)
程序员必须知道这些算法是如何工作的。一个原因是,在某些情况下,某些算法更好,但排序很少是瓶颈。
在某些框架中,.Sort函数使用各种方法,具体取决于具体情况。
答案 4 :(得分:1)
答案 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
如果您想根据汽车公司的标准和豪华级别对它们进行分类,该怎么办?雷克萨斯,丰田,本田,讴歌,日产,英菲尼迪。
如果是这种情况,我认为您需要自定义排序方法。