Cod sursa(job #1040279)

Utilizator alexsuciuAlex Suciu alexsuciu Data 24 noiembrie 2013 12:36:08
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include<iostream>
#include<cmath>
#include<fstream>
#define maxim 2147483649;
using namespace std;
unsigned long v[500001],a[500001][2],i,j,n,l,mini;
unsigned long k=0,nr,el,mini2,poz;

int main()
{
    ifstream f("algsort.in");
    ofstream g("algsort.out");
    f>>n;
    for(i=0;i<n;i++)
        f>>v[i];
    l=sqrt(n);
    mini=a[0][0]=v[0];
    a[0][1]=0;
    for(i=1;i<n;i++)
    {
        if(v[i]<mini && k>=(i/l)) {mini=a[i/l][0]=v[i]; a[i/l][1]=i;}
        if (k<(i/l))
        {k++;
        mini=v[i];
        a[i/l][0]=mini;
        a[i/l][1]=i;}
    }
    mini=maxim;
    if((float)n/l==n/l)
    while(nr<n)
    {for(i=0;i<n/l;i++)
   {
        if(a[i][0]<mini) {mini=a[i][0]; k=i;}
    }
    mini=maxim;
    g<<a[k][0]<<" ";
    v[a[k][1]]=a[k][0]=maxim;
    for(j=k*l;j<k*l+l;j++)
    {
        if(v[j]<mini) {mini=v[j]; a[k][0]=v[j]; a[k][1]=j;}
    }
    nr++;}
    else
    while(nr<n)
    {for(i=0;i<=n/l;i++)
   {
        if(a[i][0]<mini) {mini=a[i][0]; k=i;}
    }
    mini=maxim;
    g<<a[k][0]<<" ";
    v[a[k][1]]=a[k][0]=maxim;
    for(j=k*l;j<k*l+l && j<n;j++)
    {
        if(v[j]<mini) {mini=v[j]; a[k][0]=v[j]; a[k][1]=j;}
    }
    nr++;}


}