#jx0301. 归并排序代码填空题

归并排序代码填空题

代码填空,实现小到大的稳定的归并排序

#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;
} 

注意:填写内容里不要加空格!!!

① {{ input(1) }}

② {{ input(2) }}

③ {{ input(3) }}

④ {{ input(4) }}

⑤ {{ input(5) }}

⑥ {{ input(6) }}

⑦ {{ input(7) }}

⑧ {{ input(8) }}

⑨ {{ input(9) }}

⑩ {{ input(10) }}