归并排序(英语:Merge sort,或mergesort),是建立在归并操作上的一种有效的排序算法,效率为 {\displaystyle O(n\log n)} {\displaystyle O(n\log n)}(大O符号)。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。
#include
using namespace std;
void Merge(int a[],int s,int m,int e,int tmp[]){
int pb=0;
int p1=s,p2=m+1;
while(p1<=m && p2<=e){
if(a[p1]<a[p2])
tmp[pb++] = a[p1++];
else
tmp[pb++] = a[p2++];
}
while(p1<=m) tmp[pb++] = a[p1++];
while(p2<=e) tmp[pb++] = a[p2++];
for(int i=0;i<e-s+1;++i)
a[s+i] = tmp[i];
}
void MergeSort(int a[],int s,int e,int tmp[])
{
if(s<e){
int m = s+(e-s)/2;
MergeSort(a,s,m,tmp);
MergeSort(a,m+1,e,tmp);
Merge(a,s,m,e,tmp);
}
}
int a[10] = {10,9,8,7,6,5,4,3,2,1};
int b[10];
int main()
{
int size=sizeof(a)/sizeof(int);
MergeSort(a,0,size-1,b);
for(int i=0;i<size;++i)
cout << a[i] << "," << endl;
return 0;
}