合并排序的复杂程度如何(nlogn)

时间:2014-05-01 16:01:35

标签: c mergesort

我理解合并排序的概念。但我很难分析合并排序的时间复杂性。我知道所有情况都是o(n log n),即最坏情况,平均情况和最佳情况。但我无法理解它是如何o(n log n)。在每次迭代中,我们将两次分割列表。所以它更像是在每一步增加递归调用。那么它将如何成为o(n log n)。

任何人都可以解释一下吗,请你解释一下o(log n)?

1 个答案:

答案 0 :(得分:3)

可以把它想象一下128张纸,上面写着数字。第一步是安排相邻的床单。你必须触摸/移动所有128张才能做到这一点。下一步是将对合并为四个一组。再次,你需要移动所有128张表来做到这一点。然后你组成8组,16组,32组,64组,最后是128组。在每一步中你必须移动所有128张。您会注意到总共有7个级别。这是log(128)。因此,您在7个级别移动128张,或者O(128 * 7),即O(n log n)。

  • 步骤1.将128张单张纸排列为64张纸
  • 步骤2.将64对纸张排列成32个分类的4个
  • 步骤3.将32组4组成16组,每组8个
  • 步骤4.将16组8组分成8组16个
  • 步骤5.将8组16组分成4组32个
  • 步骤6.将4组32个分成2组64个
  • 步骤7.将2组64个组成1个最终组128个