参考链接:http://www.cnblogs.com/jingmoxukong/p/4308823.html
参考链接:https://www.cnblogs.com/chengxiao/p/6194356.html
归并排序的时间复杂度为o( nlogn ) 是一种稳定排序,并且最坏情况和最优情况时间复杂度相同;
#include<iostream>
using namespace std;
int vec[1000];//原数组
int temp[1000];//充当临时数组
int ans=0;
void merst(int left,int mid, int right){//合并两个序列
int i=left;
int j=mid;
int n=mid+1;
int m=right;
int k=0;
while(i<=j && n<=m){
if(vec[i]>vec[n]){
temp[k++]=vec[n++];
ans++;
}
else{
temp[k++]=vec[i++];
}
}
while(i<=j){
temp[k++]=vec[i++];
}
while(n<=m){
temp[k++]=vec[n++];
}
for(int i=0;i<k;i++){
vec[left+i]=temp[i];//将临时数组中的元素复制给原数组;
}
}
void msort(int left,int right){
if(left<right){
int mid=(left+right)/2;
msort(left,mid);//对左边半部分处理
msort(mid+1,right);//对右边半部分处理
merst(left,mid,right);//将左右两半部分进行合并
}
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>vec[i];
}
msort(0,n-1);
for(int i=0;i<n;i++){
cout<<vec[i]<<' ';
}
cout<<endl;
return 0;
}