1 solutions

  • 1
    @ 2025-5-7 20:24:30
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e6+10;
    int q[N],tmp[N];
    void merge_sort(int l,int r){
        if(l==r) return; //小于等于1个元素 
        int mid=l+r>>1; //中点 
        merge_sort(l,mid); //左边 
        merge_sort(mid+1,r); //右边 
        int k=1,i=l,j=mid+1;
        while(i<=mid&&j<=r) //合并
        {
            if(q[i]<=q[j]) tmp[k++]=q[i++]; //左边小于等于左边 
            else tmp[k++]=q[j++]; //右边小 
        } 
        while(i<=mid) tmp[k++]=q[i++]; //左边还剩余元素 
        while(j<=r) tmp[k++]=q[j++]; //右边还剩余元素 
        for(i=l,j=1;i<=r;i++,j++)
        {
            q[i]=tmp[j]; //还原到原来的位置 
        }
    }
    int main(){
        int n;
      	cin>>n; 
        for(int i=1;i<=n;i++)
        {
            cin>>q[i];
        }
        merge_sort(1,n);
        for(int i=1;i<=n;i++)
        {
            cout<<q[i]<<" ";
        }
        return 0;
    }
    
    • 1

    Information

    ID
    327
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    5
    Tags
    # Submissions
    31
    Accepted
    6
    Uploaded By