合并列表中的比较数

时间:2016-02-21 13:15:32

标签: sorting merge time-complexity

我对合并排序中合并函数完成的比较次数的最佳情况,平均情况和最坏情况感到困惑。我有以下问题:

1.如果我传入一个未分类的元素列表,这些元素在合并排序中给出了最坏情况的时间,那么最大数量的比较也是如此吗?

2.假设我传入一个大小为N的列表,该列表需要最长的时间进行排序。在这种情况下,比较的次数将是N-1。我是对的吗?

3.比较次数的最佳情况是什么?

有人请帮助我。我研究得太多,现在很困惑。

1 个答案:

答案 0 :(得分:0)

合并排序有三个步骤:

  1. 拆分列表(大约一半)。 (如果只有一个元素,那就完成了。)
  2. 对每个列表进行排序
  3. 合并每个列表。
  4. 只有合并操作需要进行比较,并且在每种情况下都需要进行O(n)比较。

    比较的最佳情况是列表已经订购;在这种情况下,您将把第一个列表的每个元素与第二个列表的第一个元素进行比较:

    [1, 2, 3, 4] ++ [5, 6, 7, 8]:
    
    1 > 5
    2 > 5
    3 > 5
    4 > 5
    

    在这4次比较之后,排序完成了。

    最糟糕的情况是交替元素:

    [1, 3, 5, 7] ++ [2, 4, 6, 8]
    
    1 > 2 -> Result = [1]
    3 > 2 -> Result = [1, 2]
    4 > 3 -> Result = [1, 2, 3]
    5 > 4 -> Result = [1, 2, 3, 4]
    6 > 5 -> Result = [1, 2, 3, 4, 5]
    7 > 6 -> Result = [1, 2, 3, 4, 5, 6]
    8 > 7 -> Result = [1, 2, 3, 4, 5, 6, 7, 8] (Once the first list is finished, no more comparisons are necessary.)
    

    然而,虽然每个merge操作是O(n)(在最好的情况下是n / 2,在最坏的情况下是n-1),但是比较的总数将是O(log n)。 / p>