归并排序(MERGE-SORT)是利用
归并
的思想实现的排序方法,该算法采用经典的
分治
(divide-and-conquer)策略(分治法
将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之
)。
#include<iostream>
using namespace std;
int a[100];
void merge(int *a ,int beg,int mid ,int end){ //合并(beg,mid)和(mid+1,end)两个有序序列;
int temp[100];
int t=beg,i=beg,j=mid+1;
while(i<=mid&&j<=end){
if(a[i]<=a[j]) temp[t++]=a[i++];
else temp[t++]=a[j++];
}
while(i<=mid) temp[t++]=a[i++];
while(j<=end) temp[t++]=a[j++];
for(int i=beg;i<=end;++i)
a[i]=temp[i];
}
void mergesort(int *a,int beg,int end){
if(beg==end) return;
int mid=(beg+end)/2;
mergesort(a,beg,mid); //分解
mergesort(a,mid+1,end); //分解
merge(a,beg,mid,end); //合并
}
int main(){
int n;
while(cin>>n){
for(int i=0;i<n;++i) cin>>a[i];
mergesort(a,0,n-1);
for(int i=0;i<n;++i)
cout<<a[i]<<endl;
}
return 0;
}