#include <cstdio> #include <cstdlib> #include <stack> #include <cstring> #include <algorithm> using namespace std; const int MAXN = 100000; int val[MAXN]; int n; void Radix(int byte, int *A, int *B) { int temp[256]; memset(temp, 0, sizeof(temp)); byte <<= 3; for (int i = 0; i < n; ++i) temp[((A[i]) >> (byte)) & 255]++; for (int i = 1; i < 256; ++i) temp[i] += temp[i - 1]; for (int i = n - 1; i >= 0; --i) { B[temp[(A[i] >> (byte)) & 255] - 1] = A[i]; temp[(A[i] >> (byte)) & 255]--; } } void RadixSort() { int* memory = new(int[n]); for (unsigned int i = 0; i < sizeof(int); i += 2) { Radix(i, val, memory); Radix(i + 1, memory, val); } delete[] memory; } int main() { scanf("%d", &n); for (int i = 0;i < n;i++) { scanf("%d", &val[i]); } RadixSort(); for (int i = 0;i < n;i++) { printf("%d ", val[i]); } puts(""); return 0; } /************************************************************** Problem: 2178 User: admin Language: C++ Result: Accepted Time:38 ms Memory:1952 kb ****************************************************************/