Cod sursa(job #2275416)

Utilizator cameliapatileaPatilea Catalina Camelia cameliapatilea Data 3 noiembrie 2018 10:45:56
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>
#include <queue>

using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");

int v[500005], n;

int numarMaximCifre()
{
    int i, maxim = 0, nrMaximCifre = 0;

    for (i=1;i<=n;i++)
        if (v[i]>maxim)
            maxim = v[i];
    while(maxim!=0)
    {
        nrMaximCifre++;
        maxim = maxim/10;
    }
    return nrMaximCifre;
}

int selecteazaCifra(int numar, int pozitie)
{
    return numar/pozitie % 10;
}

void radixsort()
{
    int nrMaximCifre = numarMaximCifre();
    int radix = 10, i, nrCifra;

    queue<int> buckets[10];

    int pozitie = 1;
    for (nrCifra=1; nrCifra<=nrMaximCifre; nrCifra++)
    {

        for(i=1;i<=n;i++)
            buckets[selecteazaCifra(v[i], pozitie)].push(v[i]);

        int poz_vector = 0;
        for (i=0;i<10;i++)
            while(!buckets[i].empty())
            {
                v[++poz_vector] = buckets[i].front();
                buckets[i].pop();
            }

        pozitie = pozitie * 10;
    }
}

int main()
{
    int i;
    f>>n;
    for (i=1;i<=n;i++)
        f>>v[i];
    radixsort();
    for (i=1;i<=n;i++)
        g<<v[i]<<" ";
    return 0;
}