代码填空,实现小到大的稳定的归并排序
#include<iostream>
using namespace std;
int n,a[500010],b[500010];
void merge(int l,int r){//合并
int mid=(l+r)/2,t=0;
int first=l,second=mid+1;
while(first<=mid && second<=r){//判断左区间是否有元素
if(a[first]__①___a[second])//左右区间首元素对比
b[t++]=a[first++];//左区间进入临时数组
else
b[t++]=a[second++];//否则右区间进入临时数组
}
while(__②__<=__③__) b[t++]=a[__④__++];//左区间有剩余元素时,直接进入临时数组
while(__⑤__<=__⑥__) b[t++]=a[second++];//右区间有剩余元素时,直接进入临时数组
for(int i=0;i<l-r+1;i++){
a[__⑦__]=b[i];//转存到原数组
}
}
void mergeSort(int l,int r){
int mid=(l+r)/2;//1.用递归对左右序列分别排序 //取下标中间值
if(mid>l) mergeSort(l,__⑨__);//存在左区间,左区间归并排序
if(__⑧__<r) mergeSort(__⑩__,r);//存在右区间,右区间归并排序
merge(l,r);//2.将左右序列合并成有序序列
}
int main(){
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
mergeSort(0,n-1);
for(int i=0;i<n;i++) cout<<a[i]<<" ";
cout<<endl;
return 0;
}
注意:填写内容里不要加空格!!!