Cod sursa(job #1045939)

Utilizator trinca-ciprianFMI - Trinca Ciprian trinca-ciprian Data 2 decembrie 2013 13:33:14
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include<fstream>
#include<iostream>
#include<math.h>
using namespace std;
fstream f("algsort.in",ios::in);
fstream g("algsort.out",ios::out);

int main()
{
    long v[50000],s[50000],p[800],n,i,min,pas,j,pi,aux;
    //cin>>n;
    f>>n;
    pas=sqrt(n);
    if (pas*pas != n) pas++;  // verificare n patrat perfect, pas marimea partitiei
    min=2147483647;
    for (j=1,i=0,pi=0;i<n;i++,j++)
    {
        //cin>>v[i];
        f>>v[i];
        if (min > v[i]) min=v[i];
        if (j==pas || i==n-1)
        {
            p[pi] = min;    //minimul pe fiecare partitie
            min = 2147483647;
            pi++;
            j=0;
        }
    }
    f.close();
    for (i=0;i<n;i++)
    {
        min=2147483647;
        for (pi=0;pi<pas;pi++)
        if (min >= p[pi] && p[pi]!=-1)
        {   min=p[pi];
            j=pi;
        }
        s[i]=min;
        min=2147483647;
        aux=j*pas;
        for (pi=0;pi<pas && aux+pi<n;pi++)
            {
                if (v[aux+pi] == s[i]) v[aux+pi] = -1;
                else if (min > v[aux+pi] && v[aux+pi] != -1)
                    min = v[aux+pi];
            }
        p[j] = min;

    }
    for (i=0;i<n;i++)
       // cout<<s[i]<<" ";
       g<<s[i]<<" ";
    g.close();
    return 0;
}