Cod sursa(job #1028112)

Utilizator tavi.belu1994FMI Belu Andrei Octavian tavi.belu1994 Data 13 noiembrie 2013 17:32:03
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>

long V[500001],A[500001],B[500001];

FILE *f,*g;

using namespace std;

int main(){
    f=fopen("algsort.in","r");
    g=fopen("algsort.out","w");
    long n,k,p=1,kk=0,minim= 0, pp=0,i,j,l;

    fscanf(f,"%ld",&n);
    k=sqrt(n);

    for(i=0;i<n;i++)
    {
        fscanf(f,"%ld",&V[i]);
        if( i%k == 0 )
            A[i/k] = V[i];
        A[i/k] = min( A[i/k], V[i]);
    }
    kk = n / k + !!(n%k);
    for(j=0;j<n;j++)
    {
        minim=A[1];
        for(i=0;i<kk;i++)
        {
            if(A[i]<=minim)
            {
                minim=A[i];
                p=i;
            }
        }

        fprintf(g,"%ld ",minim);
        pp++;

        long md,mt;
        md=(k*p);
        mt=md+k-1;
        if(mt>=n)
            mt=n-1;
        for(l=md;l<=mt;l++)
            if(V[l]==minim)
            {
                V[l] = ( 1<< 30);
                break;
            }

        minim = V[md];
        for( l = md; l <= mt; l++)
            if(V[l] < minim)
                minim = V[l];

        A[p]=minim;
    }

    fclose(f);
    fclose(g);
    return 0;
}