int cnt0[256],cnt8[256],cnt16[256],cnt24[256];
using u32 = unsigned;
u32 b[10000];
void sort(u32 * a,int n)
{
for (u32 * _ = a + n,* i = a;i < _;++ i)
{
u32 _ = * i;
++ cnt0[_ & 255],++ cnt8[_ >> 8 & 255],++ cnt16[_ >> 16 & 255],++ cnt24[_ >> 24 & 255];
}
for (int sum0 = 0,sum8 = 0,sum16 = 0,sum24 = 0,i = 1;i < 256;++ i)
{
cnt0[i] += sum0,sum0 = cnt0[i];
cnt8[i] += sum8,sum8 = cnt8[i];
cnt16[i] += sum16,sum16 = cnt16[i];
cnt24[i] += sum24,sum24 = cnt24[i];
}
for (u32 * i = a + n;i > a;)
{
-- i,b[-- cnt0[* i & 255]] = * i;
-- i,b[-- cnt0[* i & 255]] = * i;
-- i,b[-- cnt0[* i & 255]] = * i;
-- i,b[-- cnt0[* i & 255]] = * i;
-- i,b[-- cnt0[* i & 255]] = * i;
-- i,b[-- cnt0[* i & 255]] = * i;
-- i,b[-- cnt0[* i & 255]] = * i;
-- i,b[-- cnt0[* i & 255]] = * i;
}
for (u32 * i = b + n; i > b;)
{
-- i,a[-- cnt8[* i >> 8 & 255]] = * i;
-- i,a[-- cnt8[* i >> 8 & 255]] = * i;
-- i,a[-- cnt8[* i >> 8 & 255]] = * i;
-- i,a[-- cnt8[* i >> 8 & 255]] = * i;
-- i,a[-- cnt8[* i >> 8 & 255]] = * i;
-- i,a[-- cnt8[* i >> 8 & 255]] = * i;
-- i,a[-- cnt8[* i >> 8 & 255]] = * i;
-- i,a[-- cnt8[* i >> 8 & 255]] = * i;
}
for (u32 * i = a + n;i > a;)
{
-- i,b[-- cnt16[* i >> 16 & 255]] = * i;
-- i,b[-- cnt16[* i >> 16 & 255]] = * i;
-- i,b[-- cnt16[* i >> 16 & 255]] = * i;
-- i,b[-- cnt16[* i >> 16 & 255]] = * i;
-- i,b[-- cnt16[* i >> 16 & 255]] = * i;
-- i,b[-- cnt16[* i >> 16 & 255]] = * i;
-- i,b[-- cnt16[* i >> 16 & 255]] = * i;
-- i,b[-- cnt16[* i >> 16 & 255]] = * i;
}
for (u32 * i = b + n; i > b;)
{
-- i,a[-- cnt24[* i >> 24 & 255]] = * i;
-- i,a[-- cnt24[* i >> 24 & 255]] = * i;
-- i,a[-- cnt24[* i >> 24 & 255]] = * i;
-- i,a[-- cnt24[* i >> 24 & 255]] = * i;
-- i,a[-- cnt24[* i >> 24 & 255]] = * i;
-- i,a[-- cnt24[* i >> 24 & 255]] = * i;
-- i,a[-- cnt24[* i >> 24 & 255]] = * i;
-- i,a[-- cnt24[* i >> 24 & 255]] = * i;
}
}
| Compilation | N/A | N/A | Compile Error | Score: N/A | 显示更多 |