Cod sursa(job #1018482)

Utilizator ELHoriaHoria Cretescu ELHoria Data 29 octombrie 2013 17:48:21
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#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];
   
inline void lsdRadixSort() {
    for(int k = 0;k < 2;k++) {
        if(k)  {
			memset(bucket,0,sizeof(bucket));
			for(int i = 0;i < n;i++) {
				bucket[a[i]>>(16*k) & ((1<<16) - 1)]++;
				b[i] = a[i];
			}
		} else {
			for(int i = 0;i < n;i++) {
				scanf("%d",&a[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];
        }
  
    }
}
   

inline 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);
    lsdRadixSort();
    printData();
    return 0;
}