Cod sursa(job #2272339)

Utilizator alexnigaNiga Alexandru alexniga Data 30 octombrie 2018 01:47:33
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <iostream>
#include <fstream>
///RadxSORT cu coada simulata;
using namespace std;

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

int cautamaxim(int x[], int n)
{
    int i, maxx = x[0];
    for (i = 1; i < n; i++)
        if (x[i] > maxx)
            maxx = x[i];
    return maxx;
}

void calculeazaRadx(int x[], int n, int k)
{
    int coadafin[n];
    int i, y[10] = {0};


    for (i = 0; i < n; i++)
        y[( x[i] / k ) % 10]++;

    for (i = 1; i < 10; i++)
        y[i] += y[i - 1];


    for (i = n - 1; i >= 0; i--)
    {

        coadafin[ y[ (x[i] / k) % 10 ] - 1] = x[i];

        y[( x[i] / k ) % 10 ]--;
    }

    for (i = 0; i < n; i++)
        x[i] = coadafin[i];
}

void radixsort(int x[], int n)
{
    int i, m;
    m = cautamaxim(x, n);

    for (i = 1; m / i > 0; i *= 10)
        calculeazaRadx(x, n, i);
}

void afisare(int x[], int n)
{   int i;
    for (i = 0; i < n; i++)
        g << x[i] << " ";
}

int main()
{   int n, i, x[500001];

    f >> n;
    for (i = 0; i < n; i++)
        f >> x[i];

    radixsort(x, n);
    afisare(x, n);
    return 0;
}