Pagini recente » Cod sursa (job #1396036) | Cod sursa (job #2150302) | Cod sursa (job #2255436) | Cod sursa (job #104936) | Cod sursa (job #2674925)
// Radix sort with base 16
#include <stdio.h>
#include <vector>
using namespace std;
void swap(int& a, int& b) {
int aux = a;
a = b;
b = aux;
}
#define MAX_N 10000000
#define BASE 16
int v[MAX_N];
vector<int> bucket[BASE];
void sort(int v[], int n, int bitNumber) {
if (bitNumber == 8)
return;
int i, b;
unsigned int j;
for (i = 0; i < n; ++i)
bucket[v[i] >> (bitNumber << 2) & 15].push_back(v[i]);
i = 0;
for (b = 0; b < BASE; ++b) {
for (j = 0; j < bucket[b].size(); ++j)
v[i++] = bucket[b][j];
bucket[b].clear();
}
sort(v, n, bitNumber + 1);
}
int main() {
FILE* fin = fopen("radixsort.in", "r");
int n, a, b, c, i;
fscanf(fin, "%d%d%d%d", &n, &a, &b, &c);
fclose(fin);
v[0] = b;
for (i = 1; i < n; ++i)
v[i] = ((long long)a * v[i - 1] + b) % c;
sort(v, n, 0);
FILE* fout = fopen("radixsort.out", "w");
for (i = 0; i < n; i += 10)
fprintf(fout, "%d ", v[i]);
fclose(fout);
return 0;
}