Acwing 787.归并排序

注意理解代码层次。

#include<bits/stdc++.h>

using namespace std;

#define N 10e5+10;    //数组开太小容易栈溢出
int  a[N],tmp[N];

void merge_sort(int q[],int l,int r){
    if(l>r) return;
    int mid=l+r>>1;
    
    #往下划分
    merge_sort(l,mid);
    merge_sort(mid+1,r);
    
    int k=0,i=1,j=mid+1,tmp[r-l+1];
    #排序
    while(i<=mid&&j<=r){
        if(q[i]<=q[j])
            tmp[k++]=a[i++];
        else
            tmp[k++]=a[j++];
    }
    #处理剩余的数
    while(i<=mid) tmp[k++]=a[i++];
    while(j<=r) tmp[k++]=a[j++];
    #填入排序后的数组
    for (i = l, j = 0; i <= r; i ++, j ++ ) q[i] = tmp[j];	

}

int main(){
    int n;
    cin>>n;
    
    for(int i=0;i<n;i++)
        cin>>a[i];
    merge_sort(a[i],0,n);
    for(int i=0;i<n;i++)
        cou<<a[i];
}
posted @ 2022-10-27 08:29  Nikkie-02  阅读(22)  评论(0)    收藏  举报