Pagini recente » Cod sursa (job #3121314) | Cod sursa (job #2023602) | Cod sursa (job #1845831) | Cod sursa (job #2593232) | Cod sursa (job #1018484)
#include <iostream>
#include <ctime>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <vector>
using namespace std;
const int nmax = int(5e5), base = 1<<16;
int n;
int a[nmax];
int bucket[base];
int b[nmax];
void lsdRadixSort() {
for(int k = 0;k < 2;k++) {
if(k > 0) {
memset(bucket,0,sizeof(bucket));
}
for(int i = 0;i < n;i++) {
bucket[a[i]>>(16*k) & ((1<<16) - 1)]++;
b[i] = a[i];
}
for(int digit = 1;digit < base;digit++) {
bucket[digit] += bucket[digit - 1];
}
for(int i = n - 1;i >= 0;i--) {
a[--bucket[b[i]>>(16*k) & ((1<<16) - 1)]] = b[i];
}
}
}
void readData() {
scanf("%d",&n);
for(int i = 0;i < n;i++) {
scanf("%d",&a[i]);
}
}
void printData() {
for(int i = 0;i < n;i++) {
printf("%d ",a[i]);
}
printf("\n");
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
readData();
lsdRadixSort();
printData();
return 0;
}