Cod sursa(job #1268014)

Utilizator diana-mariaDiana Maria Dumitru diana-maria Data 20 noiembrie 2014 16:05:20
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <iostream>
#include<fstream>
#include<math.h>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int minim(int m[],int p,int l)
{
    int ok=0;
    int mini=pow(2,31)-1;
    for(int i=p; i<=l; i++)

        if(m[i]<=mini && m[i]>=0)
        {
            mini=m[i];
            ok=1;
        }
    if(ok)
        return mini;
    return -1;
}
int main()
{
    int n,rn,poz,r,i,aux,j,k;
    int mini=pow(2,31)-1;
    f>>n;
    rn=sqrt(n);
    r=n/rn+1;
    int m[n],v[r];
    for(i=0; i<n; i++)
    {
        f>>m[i];
        if((i+1)%rn==0)
            v[i/rn]=minim(m,i+1-rn,i);

    }
    if(n%rn)
        v[r-1]=minim(m,n- n%rn,n-1);
    else
        v[r-1]=-1;

    for(k=0;k<n;k++)
    {
        mini=pow(2,31)-2;
        for(i=0; i<r; i++)
            if(v[i]<mini && v[i]>=0)
            {
                mini=v[i];
                poz=i;
            }
        g<<mini<<" ";
        for(j=rn*poz; j<rn*(poz+1) && j<n ; j++)
            if(m[j]==mini)
            {
                m[j]=-1;
                j=n;
            }
        if(poz!=r-1)
            v[poz]=minim(m,rn*poz,rn*(poz+1)-1);
        else
            v[poz]=minim(m,rn*poz,n-1);
    }
    return 0;


}