MergeSort 归并排序
Last updated
Last updated
将和两个已排序的序列合并即可得到更大的有序序列:
(1) Merge函数第1行:;
(2) Merge函数第2行:构造长度与相同的数组,存储和合并后的结果,该结果最终会复制给。该操作需要的空间规模为;
(3) Merge函数第3-12行:将和按序合并,得到有序序列;
(4) Merge函数第13行:将复制到上;
如何得到已排序的和?递归的对也应用上述操作即可。直到序列本身的长度小于等于1时,可以直接看作已排序序列,不需要继续递归:
(1) MergeSort函数第1行:在序列上调用MergeSort时;
(2) MergeSort函数第2-3行:当时,待排序的序列长度小于等于1,可以看作是已排序的,直接返回;
(3) MergeSort函数第4-7行:将待排序的序列从分开,分别递归的调用自己进行排序,得到两个已排序的,再将两部分合并即可;
设,Merge函数的输入规模为,合并个元素的时间复杂度为。
MergeSort函数的初始输入规模为,因此调用Merge函数的输入规模为,每次递归后输入规模为上一层的,可得:
假设递归层数为,可得:
将代入原始递推公式,可得:
该算法的时间复杂度为。因为每次Merge函数都会申请规模为的内存,其空间复杂度为。