mergesort迭代次数

时间:2012-10-13 04:51:08

标签: algorithm mergesort

  

可能重复:
  Why Merge Operation in Merge Sort is O(n)?

为什么每次迭代都采用与合并排序完全相同的O(n) 有人可以详细解释一下吗? 为什么C_merge(n)= O(n)?它是指合并两个排序数组的时间。

1 个答案:

答案 0 :(得分:0)

我们的想法是我们有两个排序的数组,而不是两个数组,其中一个数组的最小元素大于另一个最高元素。我的意思是,它不是[1, 3, 9, 12][13, 17, 19]。但它更像[3, 12, 13, 17][1, 9, 19]

你看,在以后的情况下你不能追加它们。那么,你如何结合?您遵循以下算法:

  1. 假设首先有m个元素,第二个元素有n。您创建一个大小为m+n的辅助数组。这将存储最终的组合和排序数组。
  2. 分配两个游标 - ij,指向阵列的头部。
  3. 比较ij的元素;选择较小的一个。复制值辅助数组,并将光标向前移动较小的光标。
  4. 重复#3,直到其中一个阵列耗尽;然后将其余元素从未使用的数组复制到辅助数组。
  5. 因此,在我们的例子中,您比较(3, [1]); ([3], 9); (12, [9]); ([12], 19); ([13], 19); ([17], 19); (--, [19]) 。你看?怎么比较? (m+n)。假设每个操作O(1)。长度为(m+n)的数组的合并过程为O(m+n)

    在最好的情况下,您将排序数组作为输入。在这种情况下,要合并的两个子阵列都只需要加入。但是我们将应用上面提到的通用算法。在这种情况下,您必须比较和复制min(m,n)元素;然后将max(m,n)元素复制到辅助数组。无论如何,您将进行总计(m+n)次操作。