我正在学习数据结构和排序算法,我想问一些问题:
答案 0 :(得分:3)
链接列表或数组
数组是更常见的选择。
链接列表主要用于您的数据已在链接列表中,或者您需要在应用程序的链接列表中。
我并没有真正看到使用其中一个的正当理由(除了大多数排序算法都集中在数组之外)。两者都可以在O(n log n)中排序,至少使用基于比较的排序算法。
何时使用
使用基于比较的排序,insertion sort通常用于< ~10-20个元素,因为它具有低常数因子,即使它具有O(n²)运行时间。对于更多元素,quick-sort或merge-sort(均在O(n log n)中运行)或某些元素的推导通常更快(尽管还有其他O(n log n)排序算法)。 / p>
插入排序对近乎排序的数据也表现良好(O(n)
)。
对于非基于比较的排序,它实际上取决于您的数据。基数排序,桶排序和计数排序都是众所周知的例子,每个都有各自的用途。简要了解一下它们的运行时间应该可以让您了解何时应该使用它们。例如,如果要排序的值范围非常小,则计数排序是好的。
您可以查看Wikipedia以获取排序算法列表。
请记住,使用任何这些排序算法,排序少于10000个元素的速度都非常快 - 除非你需要绝对最佳的性能,否则你可以选择你想要的任何一个。
答案 1 :(得分:1)
据我所知,对于这两个问题都没有明确的答案,因为两者都取决于使用的背景。但是,以下几点可能很重要:
如果要排序的记录很大并且作为值类型实现,则数组可能无法使用,因为记录交换涉及数据复制,这可能比重定向引用要慢。
切换排序算法的某些实例大小通常可以通过特定上下文中的实验找到;也许Quicksort用于'大'实例,而Merge Sort用于'小'实例,其中'大'和'小'之间的实际最佳分离是通过在特定上下文中尝试找到的。
< / LI> 醇>