一、归并排序
第一种高效排序算法是归并排序,按照分治三步法,对归并排序算法介绍如下。
划分问题:把序列分成元素个数尽量相等的两半。
「递归」求解:把两半元素分别排序。
合并问题:把两个有序表合并成一个。
前两部分是很容易完成的,关键在于如何把两个有序表合成一个。下图演示了一个合并的过程。每次只需要把两个序列的最小元素加以比较,删除其中的较小元素,并加入合并后的新表即可。由于需要一个新表来存放结果,所以附加空间为 n 。
归并排序比较占用内存,但却是一种效率高且稳定的算法。
#include<iostream>
using namespace std;
void Merge(int *r,int *r1,int s,int m,int t) /**合并**/
{ int i=s; /**s=start, m=mid, t=tail*/
int j=m+1;
int k=s;
while(i<=m && j<=t)
{