求助!全WA!
查看原帖
求助!全WA!
408805
tr2020楼主2022/8/10 18:55

不会写快排,写了个归并,不加快读没问题,一加上就错。

#include <cstdio>

#define N 100000
#define isdigit(a) a >= '0' && a <= '9'

int a[N];
int b[N];

inline int read()
{
    int tmp = 0;
    char c = getchar();
    while (!isdigit(c))
        c = getchar();
    while (isdigit(c))
        tmp = tmp * 10 + c - 48, c = getchar();
    return tmp;
}

void msort(int l, int r)
{
    int m = (l + r) / 2;
    if (l < r)
        msort(l, m), msort(m + 1, r);
    int i = l, j = m + 1;
    int len = 0;
    while (i <= m && j <= r)
        if (a[i] < a[j])
            b[len++] = a[i++];
        else
            b[len++] = a[j++];
    while (i <= m)
        b[len++] = a[i++];
    while (j <= r)
        b[len++] = a[j++];
    for (int i = 0; i < len; i++)
        a[i + l] = b[i];
}

int main()
{
    int n;
    n = read(); // scanf("%d", &n);
    for (int i = 0; i < n; i++)
        a[i] = read(); // scanf("%d", &a[i]);

    msort(0, n - 1);

    for (int i = 0; i < n; i++)
        printf("%d ", a[i]);
    putchar('\n');

    return 0;
}
2022/8/10 18:55
加载中...