不会写快排,写了个归并,不加快读没问题,一加上就错。
#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;
}