void sort(unsigned *a, int n)
{
#define N 10000
#define D 256
#define D1 255
#define cal(w, w2, tw, op) \
p = w2 - 1; \
for (i = 0; i < D; ++i) \
rs[i] = p, p += tw[i]; \
for (i = 0; i < N; i += 8) \
{ \
p = w + i; \
*++rs[p[0] op] = p[0], \
*++rs[p[1] op] = p[1], \
*++rs[p[2] op] = p[2], \
*++rs[p[3] op] = p[3], \
*++rs[p[4] op] = p[4], \
*++rs[p[5] op] = p[5], \
*++rs[p[6] op] = p[6], \
*++rs[p[7] op] = p[7]; \
}
unsigned b[N], *rs[D], t0[D], t1[D], t2[D], t3[D];
unsigned *p, i, x;
for (i = 0; i < N;)
{
#define A x = a[i], ++t0[x & D1], ++t1[x >> 8 & D1], ++t2[x >> 16 & D1], ++t3[x >> 24], ++i;
A A A A
#undef A
}
cal(a, b, t0, &D1);
cal(b, a, t1, >> 8 & D1);
cal(a, b, t2, >> 16 & D1);
cal(b, a, t3, >> 24);
}
Compilation | N/A | N/A | Compile OK | Score: N/A | 显示更多 |
Testcase #1 | 67.56 us | 92 KB | Accepted | Score: 100 | 显示更多 |