Skip to content

归并排序 ​

cpp
void msort(int l,int r){
	if(l==r)return;
	int mid=l+r>>1;
	qsort(l,mid);
	qsort(mid+1,r);
	int t=l,rt=mid+1,lt=l;
	while(lt<=mid&&rt<=r){
		if(a[lt]>a[rt]){
			b[t++]=a[rt++];
		}
		else{
			b[t++]=a[lt++];
		}
	}
	while(lt<=mid)b[t++]=a[lt++];
	while(rt<=r)b[t++]=a[rt++];
	for(register int i=l;i<=r;i++){
		a[i]=b[i];
	}
}