归并排序模板

int a[500002];
int b[500002];
void mergesort(int l,int mid,int r){ //使l~mid和mid~r两个有序数列合并为一个有序数列
    int i=l,j=mid+1;
    for(int k=l;k<=r;k++){
        if(j>r || i<=mid&&a[i]<=a[j]) b[k] =a[i++];
        else b[k] =a[j++];
    }
    for(int k=l;k<=r;k++) a[k]=b[k];
}
void msort(int ll,int rr){ //排序从ll~rr的数列
        int mid,s=2;
        while(s<rr-ll+1){
            for(r=ll+s-1;r<=rr;r+=s){
                l=r-s+1;mid=l+(s-1)/2;
                mergesort(l,mid,r);
            }
            mergesort(l,r-s,rr);
            s*=2;
        }
}
posted @ 2019-12-22 23:06  MayDayMemory  阅读(119)  评论(0)    收藏  举报