问:为什么输出的那行(倒数第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;
}