#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
//int c=0;
void g(int a[],int l,int r){
if(l>=r)return;
else{
int m=0;
m=(l+r)/2;
g(a,l,m);
g(a,m+1,r);//r-l+1个
int* b=new int[r-l+1];
copy(a+l,a+r+1,b);
int p1,p2;
p1=0;
p2=m-l+1;
cout<<"合并数组从下标"<<l<<"到"<<r<<"的元素"<<endl;
for(int i=l;i<=r;i++){
if(p1>m-l){
a[i]=b[p2];
p2++;
}
else if(p2>r-l){
a[i]=b[p1];
p1++;
}
else if(b[p1]>b[p2]){
a[i]=b[p2];
/// c+=m-l+1-p1;
p2++;
}
else if(b[p1]<=b[p2]){
a[i]=b[p1];
p1++;
}
cout<<a[i]<<" ";
}
cout<<"数组下标"<<l<<"到"<<r<<"的元素合并完成"<<endl;
}
}
int main(){
int w[5]={1,20,3,4,11};
g(w,0,4);
cout<<endl<<"最终结果:";
for(int i=0;i<=4;i++){
cout<<w[i]<<" ";
}
//cout<<endl<<c;
return 0;
}
运行结果: