归并排序是一种稳定的排序算法,时间复杂度为O(nlogn)。
原理
该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,把原始数组分成若干子数组,对每一个子数组进行排序,继续把子数组与子数组合并,合并后仍然有序,直到全部合并完,形成有序的数组。
归并排序主要分为两步:分数列(divide),每次把数列一分为二,然后分到只有两个元素的小数列;合数列(Merge),合并两个已经内部有序的子序列,直至所有数字有序。用递归可以实现。(若将两个有序表合并成一个有序表,称为2-路归并。)
归并图示:
二路归并示例:
代码实现: