关于我莫名其妙过了却又不知道怎么过的这档事
查看原帖
关于我莫名其妙过了却又不知道怎么过的这档事
597276
dsr20030703楼主2022/1/23 22:33

问:为什么输出的那行(倒数第3行)如果改成“

for (unsigned i = 0; i < n; i++) printf("%u ", *(a + i));

”就会在最前面输出一个0而不输出最后一个数?

#include <stdio.h>
void sort(unsigned *a, unsigned n) {
    const unsigned middle = *(a + n / 2);
    unsigned *smaller = a, *bigger = a + n;
    while (smaller <= bigger) {
        while (*smaller < middle) smaller++;
        while (*bigger > middle) bigger--;
        if (smaller <= bigger) {
            unsigned swap;
            swap = *smaller, *smaller = *bigger, *bigger = swap;
            smaller++;
            bigger--;
        }
    }
    if (a < bigger) sort(a, bigger - a);
    if (smaller < a + n) sort(smaller, n - (smaller - a));
    return;
}
int main() {
    unsigned n;
    scanf("%u", &n);
    unsigned a[n];
    for (unsigned i = 0; i < n; i++) scanf("%u", a + i);
    sort(a, n);
    for (unsigned i = 1; i <= n; i++) printf("%u ", *(a + i));//输出的这行
    return 0;
}
2022/1/23 22:33
加载中...