用了DEV的单步调试,发现到vector里面时会段错误。但不知怎么改
void merge_sort(int l,int r)
{
if(l==r) return;
int mid=l+(r-l)>>1;
merge_sort(l,mid);
merge_sort(mid+1,r);
vector<int> tmp;
int i=l,j=mid+1;
while(i<=mid&&j<=r)
{
if(a[i]>a[j]) tmp.push_back(a[j++]);
else tmp.push_back(a[i++]);
}
while(i<=mid) tmp.push_back(a[i++]);
while(j<=r) tmp.push_back(a[j++]);
for(int k=l;k<=r;k++) a[k]=tmp[k-l];
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
merge_sort(1,n);
for(int i=1;i<=n;i++) cout<<a[i]<<' ';
return 0;
}