Cod sursa(job #1043976)

Utilizator saregardAndrei Tarba saregard Data 29 noiembrie 2013 09:05:07
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include<fstream>
#include<math.h>
using namespace std;
#define max 2147483647;
int N, v[500000], w[500000], a[710];

int main()
{
    int i, j, k, in, l, p, nr=0;
    ifstream f("algsort.in");
    ofstream g("algsort.out");
    f>>N;
    for(i=0; i<N; i++)
        f>>v[i];
    l=sqrt(N);
    if(l*l==N)
        in=N/l;
    else
        in=N/l+1;
    for(i=0; i<in; i++)
    {
        p=v[i*l];
        for(j=i*l+1; j<i*l+l && j<N; j++)
            if(v[j]<p)
            {
                p=v[j];
                w[i]=j;
            }
        a[i]=p;
    }
    while(nr<N)
    {
        p=a[0];
        k=0;
        for(i=0; i<in; i++)
        {
            if(a[i]<p)
            {
                p=a[i];
                k=i;
            }
        }
        v[w[k]]=max;
        g<<p<<" ";
        nr++;
        p=max;
        w[k]=k*l;
        a[k]=p;
        for(j=k*l; j<=k*l+l-1 && j<N; j++)
        {
            if(v[j]<p)
            {
                p=v[j];
                w[k]=j;
                a[k]=p;
            }
        }
    }
    f.close();
    g.close();
}