Cod sursa(job #1315578)

Utilizator SorinmocanuFMI Sorin Mocanu Sorinmocanu Data 12 ianuarie 2015 22:05:03
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include<iostream>
#include<fstream>
#include<math.h>
using namespace std;

int a[500005],s[710],n,r,t,v[500005],k=0;

int minim(int j)
{
    int m,p,i;
    m=a[j*r+1]; p=j*r+1;
    for(i=j*r+2;i<=(j+1)*r&&i<=n;i++)
        if(m>a[i]) {m=a[i]; p=i;}
    a[p]=INFINITY;
    return m;
}

void caut()
{
    int m=s[0],p=0,i;
    for(i=1;i<t;i++)
        if(m>s[i]) {m=s[i]; p=i;}
    v[k++]=m;
    s[p]=minim(p);
}

int main()
{
    int i;
    ifstream f("algsort.in");
    ofstream g("algsort.out");

    f>>n;
    for(i=1;i<=n;i++) f>>a[i];

    r=sqrt(n);
    t=r;
    while(t*r!=n) t++;

    for(i=0;i<t;i++) s[i]=minim(i);

    for(i=1;i<=n;i++) caut();

    for(i=0;i<n;i++) g<<v[i]<<" ";

    f.close();
    g.close();
    return 0;
}