Pagini recente » Cod sursa (job #954422) | Cod sursa (job #2470236) | Cod sursa (job #77188) | Cod sursa (job #264659) | Cod sursa (job #1655289)
// C++ implementation of Radix Sort
#include <iostream>
#include <fstream>
#include <queue>
#include <stdio.h>
#define MAXBUF 10000
using namespace std;
FILE *fin = fopen("algsort.in", "r");
ofstream out("algsort.out");
int mx;
int arr[500003];
int n;
char c[MAXBUF];
int k = MAXBUF;
inline char nextch() {
if(k == MAXBUF) {
fread(c, 1, MAXBUF, fin);
k = 0;
}
return c[k++];
}
inline int read() {
int x = 0;
char ch = nextch();
while(!isdigit(ch))
ch = nextch();
while(isdigit(ch)) {
x = x*10 + ch - '0';
ch = nextch();
}
return x;
}
void countSort(int exp) {
int i;
queue<int> qu[10000];
for(int i = 0; i < n; i++)
qu[(arr[i]/exp)%10000].push(arr[i]);
int cnt = 0;
for(int i = 0; i < 10000; i++) {
while(!qu[i].empty()) {
arr[cnt++] = qu[i].front();
qu[i].pop();
}
}
}
void radixsort() {
int m = mx;
for (int exp = 1; m/exp > 0; exp *= 10000)
countSort(exp);
}
int main() {
//in >> n;
n = read();
for(int i = 0; i < n; i++) {
//in >> arr[i];
arr[i] = read();
if(arr[i] > mx)
mx = arr[i];
}
radixsort();
for (int i = 0; i < n; i++)
out << arr[i] << " ";
return 0;
}