合并排序是一种自适应算法吗?

时间:2014-05-13 12:20:32

标签: algorithm mergesort

我们有3种Merge排序方式。

  1. 自上而下
  2. 自下而上
  3. 天然
  4. 是否有这些自适应算法?例如,如果数组已排序,则它们将利用排序顺序。

    据我所知,无论数组是否排序,合并排序仍然会进行比较然后合并。所以,答案是这些都不适应。

    我的理解是否正确?

3 个答案:

答案 0 :(得分:2)

自然合并排序 自适应。例如,它只通过有序数组执行一次运行并进行N次比较。

自上而下和自下而上的排序都不是自适应的,它们总是进行O(NlogN)操作

答案 1 :(得分:0)

Merge Sort是一种分而治之算法的实现。您需要将整个数组划分为子数组。例如 [1,3,5,6,2,4,110]分为[1 3 5 6]和[2 4 1 10]。 [1 3 5 6]分为[1 3]和[5 6]。现在,由于[1 3]和[5 6]都是排序的,因此不需要交换过程。

如果对数组进行排序,那么至少会有一点复杂性

答案 2 :(得分:0)

  

根据我的意思,无论数组是否排序,合并排序仍会进行比较

如果输入尚未排序或包含有关要遵循的排序过程的信息,我认为没有任何比较可以排序并节省内存。最快的排序算法是时间复杂度O(n log(n))(有排序技术,如珠子排序。我不在考虑它,因为它不是最佳的方法记忆副)

P.S快速排序确实涉及比较(但是是自适应的),并且在更糟糕的情况下它进行O(n ^ 2)比较。

P.P.S基数排序,计数排序和桶排序是自适应排序的一些例子;