Cod sursa(job #1314784)

Utilizator Vladut-Vlad Panait Vladut- Data 12 ianuarie 2015 12:23:57
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
#include <math.h>

using namespace std;

ifstream fin ("algsort.in");
ofstream fout ("algsort.out");

int a[500005], n, nrSir, m, v[500005], b[810], k=0;

int minim(int sir)
{
    int minSir = a[sir*m+1];
    int poz = sir*m+1;
    for (int j=sir*m+2; j<=(sir+1)*m && j<=n; j++)
        if (minSir>a[j])
        {
            minSir=a[j];
            poz = j;
        }
    a[poz]=INFINITY;
    return minSir;
}

void minim2()
{
    int p=0, i;
    int minSir=b[0];
    for (i=1; i<nrSir; i++)
        if (minSir>b[i])
    {
        minSir=b[i];
        p=i;
    }
    v[k++]=minSir;
    b[p]=minim(p);

}

int main()
{
   int i;
    fin >> n;
    for (i=1; i<=n; i++)
        fin >> a[i];
    m=sqrt(n);
    nrSir=m;
    while(nrSir*m<n)
        nrSir++;
    for (i=0; i<nrSir; i++)
        b[i] = minim(i);
    for (i=1; i<=n; i++)
        minim2();
    for (i=0; i<n; i++)
        fout << v[i] <<' ';


    fin.close();
    fout.close();
    return 0;
}