基数排序
基数排序模板。。
至于用16进制乱搞的那个函数,背过好了。
#include <cstdio> #include <iostream> #define N 100100 using namespace std; const int BIT = 16; const int U = 65536; int n; int b[N], x[N], y[N]; inline int read() { int x = 0, f = 1; char ch = getchar(); for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1; for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0'; return x * f; } inline int get(int a, int k) { return (a >> (k * BIT)) & (U - 1); } inline void radix_sort() { int i, k; for(k = 0; k < 2; k++) { for(i = 0; i < U; i++) b[i] = 0; for(i = 0; i < n; i++) b[get(x[i], k)]++; for(i = 1; i < U; i++) b[i] += b[i - 1]; for(i = n - 1; i >= 0; i--) y[--b[get(x[i], k)]] = x[i]; swap(x, y); } for(i = 0; i < n; i++) printf("%d ", x[i]); } int main() { int i; n = read(); for(i = 0; i < n; i++) x[i] = read(); radix_sort(); return 0; }