Cod sursa(job #1058723)

Utilizator albupetruFMI Albu Petru albupetru Data 15 decembrie 2013 20:20:34
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>
#include <math.h>
using namespace std;

const long pinf=2147483647;
long v[500002],b[710];
int i,n,rad,bl,j,x,meen;

int getmin(int inc)
{
    int meen=1+inc*rad;
    for(int i=2+inc*rad;i<=rad*(inc+1) && i<=n;i++)
        if(v[i]<v[meen])
            meen=i;
    return meen;
}

int mingb()
{
    int mn=0;

    for(int i=1;i<bl;i++)
        if(v[b[i]]<v[b[mn]])
                mn=i;
    return mn;
}

int main()
{
    ifstream f("algsort.in");
    ofstream g("algsort.out");
    f>>n;
    for(i=1;i<=n;i++)
        f>>v[i];
    f.close();

    rad=sqrt(n);

    for(i=0;i<(n+1)/rad;i++)
        {
            meen=1+rad*i;
            for(j=2+rad*i;j<=rad*(i+1) && j<=n;j++)
            {
                if(v[j]<v[meen])
                    meen=j;
            }
            b[i]=meen;
            bl++;
        }
    x=mingb();
    while(v[b[x]]!=pinf)
    {
        g<<v[b[x]]<<" ";
        v[b[x]]=pinf;
        b[x]=getmin(x);
        x=mingb();
    }
    g.close();
    return 0;
}