Cod sursa(job #1279863)

Utilizator diana-t95FMI Tudoreanu Diana Elena diana-t95 Data 30 noiembrie 2014 23:42:55
Problema Radix Sort Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include<fstream>
using namespace std;
ofstream g("radix.out");
#define maxn 10000001
#define mod 6
#define maxp 31
int v[2][maxn], frecv[1<<mod];
int nr[maxn], n, sign=0;
void radixsort()
{
    int p, cv, i;
    for (i=1;i<=n;i++) v[0][i]=i;
    for (p=0;p<=maxp;p+=mod)
    {
        for (i=1;i<=n;i++)
            frecv[(nr[v[sign][i]]/(1<<p))%(1<<mod)]++;
        for (i=1;i<(1<<mod);i++)
            frecv[i]+=frecv[i-1];
        for (i=n;i>=1;i--)
        {
            frecv[(nr[v[sign][i]]/(1<<p))%(1<<mod)]--;
            cv=frecv[(nr[v[sign][i]]/(1<<p))%(1<<mod)]+1;
            v[!(sign)][cv]=v[sign][i];
        }
        for (i=0;i<(1<<mod);i++) frecv[i]=0;
        sign=!(sign);
    }
}
int main()
{
    ifstream f("radix.in");
    int i, cv;
    f>>n;
    for (i=1;i<=n;i++) f>>nr[i];
    radixsort();
    sign=(!(sign));
    for (i=1;i<=n;i++) {
        cv=v[sign][i];
        g<<nr[cv]<<' ';}
    g<<'\n';
}