Cod sursa(job #1059616)

Utilizator NitaMihaitavoidcube NitaMihaita Data 16 decembrie 2013 20:13:35
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include<fstream>
#include<cmath>
#define numaru 5000000
#define nrmare (1<<30)-1
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int v[numaru],bb[2500][2],l,nrz,n;
void citeste()
{
    int i;
    f>>n;
    l=sqrt(n);
    nrz=n/l;
    for(i=0;i<nrz;++i) { bb[i][0]=nrmare; bb[i][1]=i*l; }
    for(i=0;i<n;++i)
    {
        f>>v[i];
        if(v[i]<bb[i/l][0])
        {
            bb[i/l][0]=v[i];
            bb[i/l][1]=i;
        }
    }

}
void operatiunea_sortarea()
{
    int i,_min,_minpoz,j;
    for(j=0;j<n;++j)
    {
        _min=nrmare;
        for(i=0;i<nrz;++i)
            if(_min>bb[i][0])
            {
                _min=bb[i][0];
                _minpoz=i;
            }
        g<<_min<<" ";
        v[bb[_minpoz][1]]=nrmare;
        bb[_minpoz][0]=nrmare;
        for(i=bb[_minpoz][1]/l*l;i<(bb[_minpoz][1]/l+1)*l;++i)
        {
            if(v[i]<bb[_minpoz][0])
            {
                bb[_minpoz][0]=v[i];
                bb[_minpoz][1]=i;
            }
        }
    }
}
int main()
{
    citeste();
    operatiunea_sortarea();
    f.close();
    g.close();
    return 0;
}