归并排序(Mergesort)
归并排序以O(NlogN)的复杂度运行,是使用比较次数最优解以及基于递归算法的很好的实例。
算法原理:
算法的基本操作是合并两个已经排序的表,然后按顺序将两个表中的元素进行比较厚放入第三个表中。 基本的合并算法是取两个输入数组A和B,一个输出数组C,以及三个指针pA,pB,pC. 他们都始于对应数组的开始端。 A[pA]和B[pb]中的较小者放入C的下一个位置,pc以及较小者的指针向前推进一格。 当有其中一格输入表输完时,则将另外一个输入表剩余元素输入到输出表的位置中。
显然,合并两个已经排序的表是线性的,因为最多只能进行N-1次比较(N为元素总数)。 注意点:每次比较都只放一个元素,但最后一次比较完是放两个元素
因此归并排序很容易描述为递归操作。如果N=1 ,则只需要一格元素排序,否则,就以递归的方式将前半部分和后半部分各自排序。<