排序算法取决于数据的初始组织

时间:2014-04-03 06:07:04

标签: sorting data-structures

我目前正在研究排序算法。我研究过快速排序算法取决于数据的初始组织。如果数组已排序,则快速排序会变慢。还有其他类型取决于数据的初始组织吗?

3 个答案:

答案 0 :(得分:0)

当然。插入排序将是带有降序排序输入的O(n):

define selection_sort (arr):
  out = []
  while not (arr.is_empty()):
      x = arr.pop()
      out = insert x out
  return out

因为每个insert调用都是O(1)。如果使用的是pop_last()而不是pop(),那么在排序的升序输入中它将是最快的(假定pop()和/或pop_last()本身就是O(1))。< / p>

答案 1 :(得分:0)

所有快速排序算法都会最大限度地减少比较和移动操最小化移动操作取决于初始元素排序。我假设你的意思是初始组织的初始元素排序。

此外,最快的真实世界算法利用locality of reference,这也显示出对初始排序的依赖。

如果您只是想要依赖于减慢或加速排序的依赖项,例如冒泡排序将在排序数据的一次传递中完成。

最后,许多排序算法的平均时间复杂度为O(N log N),但最差情况复杂度为O(N ^ 2)。这意味着存在这些O(N ^ 2)算法的特定输入(例如,已排序或反向排序),这些输入会引起不良的运行时行为。一些quicksort版本是这些算法的示例。

答案 2 :(得分:-1)

如果您要问的是&#34;我应该担心我应该根据案例选择哪种排序算法?&#34;,除非您正在处理数千万次操作,简短的回答是&#34; no&#34;。大部分时间快速排序都会很好(快速排序,带有计算的支点,比如Java&#39; s)。

在一般情况下,快速排序已经足够了。

另一方面,如果您的系统始终以一致的初始排序方式期望源数据,并且每次都需要较长的CPU时间和功率,那么您肯定应该为该极端情况找到正确的算法。