作业介绍

2

#include <bits/stdc++.h>
using namespace std;

int n;
int a[150005];
int b[150005];
void hebing(int l, int m, int r){
    //左边区域的左右边界
    int l1=l, r1=m;
    //右边区域的左右边界
    int l2=m+1, r2=r;
    //b数组的存储位置
    int cnt = l;
    //把左右区域的数字全部放入辅助数组
    //左右区域都还有数字
    while(l1<=r1 && l2<=r2){
        if(a[l1] <= a[l2]) b[cnt++] = a[l1++];
        else b[cnt++] = a[l2++];
    }
    //如果左区域还剩下数字
    while(l1<=r1) b[cnt++] = a[l1++];
    //如果右区域还剩下数字
    while(l2<=r2) b[cnt++] = a[l2++];

    for(int i=l; i<=r; i++) a[i] = b[i];
}

void msort(int l, int r){   //数组需要排序的左边界和右边界
    if(l<r){
        int mid = (l+r) / 2;
        //对左右区域再分
        msort(l, mid);
        msort(mid+1, r);
        //合并
        hebing(l, mid, r);
    }
}
int main(){
    cin >> n;
    for(int i=1; i<=n; i++) cin >> a[i];
    msort(1, n);  //归并排序

    for(int i=1; i<=n; i++) cout << a[i] << " ";
    return 0;
}
状态
已结束
题目
3
开始时间
2024-6-29 0:00
截止时间
2024-7-7 23:59
可延期
24 小时