题目链接:https://www.acwing.com/problem/content/description/789/
题目如下:
#include <iostream>
#include <vector>
using namespace std;
const int N=100010;
int arr[N];
void merge(int arr[],int l,int r);
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++) cin>>arr[i];
merge(arr,0,n-1);
for(int i=0;i<n;i++) cout<<arr[i]<<' ';
cout<<endl;
return 0;
}
void merge(int arr[],int l,int r){
if(l>=r) return;
int mid=(l+r)>>1;
merge(arr,l,mid);
merge(arr,mid+1,r);
int i=l,j=mid+1;
vector<int> temp;
while(i<=mid&&j<=r){
if(arr[i]<=arr[j]) temp.push_back(arr[i++]);
else {
temp.push_back(arr[j++]);
}
}
while(i<=mid) temp.push_back(arr[i++]);
while(j<=r) temp.push_back(arr[j++]);
i=l;
for(auto e:temp) arr[i++]=e;
}