贡献者: 有机物
上文介绍了快速排序,本文将介绍归并排序。
归并排序也是基于分治实现的。
归并排序的算法步骤:
归并排序的核心就是归并这一步,首先把一个序列分成两个子序列,然后维护两个指针,第一个指针指向第一个子序列的开头,第二个指针指向第二个子序列的开头。其实归并操作就是把两个子序列的值存到一个序列中然后输出出来,具体的做法是:每次判断一下两个指针所指向的值哪一个更小,把较小的的值插入到答案数组中,如果发现其中一个序列的指针已经直到末尾了,那么就退出循环,直接把另一个子序列的后面的值接到答案数组中(如图
时间复杂度:
归并排序的期望时间复杂度为
归并排序的代码:
证明
接下来证明一下归并排序的正确性,使用数学归纳法来证明。
首先当序列长度
假设归并排序算法可以将任意长度小于
接下来证明归并排序算法可以将任意长度等于
看上面的代码中第 l, mid
和 mid + 1, r
长度都小于
所以对于任意长度的序列,归并排序都可将其排好。
证毕。
友情链接: 超理论坛 | ©小时科技 保留一切权利