Cod sursa(job #1043824)

Utilizator SorinaSmeureanuSorina Smeureanu SorinaSmeureanu Data 28 noiembrie 2013 23:01:53
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include<iostream>
#include<math.h>
#include<fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int n, v[500001], s[800];
int main()
{
    int i, l, mini, mini2, j, k, nr=0, ok, auxk, poz[500000], nrl;
    f>>n;
    nrl=sqrt(n);
    l=n/nrl;
    if(nrl+nrl!=n)
        nrl++;
    for(i=0;i<=n-1;i++)
        f>>v[i];
for(i=0;i<=nrl-1;i++)
    {
        mini=2147483647;
        for(j=i*l;j<=i*l+l-1&&j<n;j++)
            if(v[j]<mini)
            {
                mini=v[j];
                poz[i]=j;
            }
        s[i]=mini;
    }
while(nr<n)
{
    mini2=s[0];
    auxk=0;
    for(k=0;k<=nrl-1;k++)
        {
            if(s[k]<mini2)
            {
                mini2=s[k];
                auxk=k;
            }
        }
    v[poz[auxk]]=2147483647;
    g<<mini2<<" ";
    nr++;
    mini2=2147483647;
    poz[auxk]=auxk*l;
    s[auxk]=mini2;
    for(i=auxk*l;i<=auxk*l+l-1&&i<n;i++)
        {
            if(v[i]<mini2)
            {
                mini2=v[i];
                poz[auxk]=i;
                s[auxk]=mini2;
            }
        }

}
}