Cod sursa(job #2059166)

Utilizator daniela12Sandu Daniela Teodora daniela12 Data 6 noiembrie 2017 18:51:47
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>
#include <cmath>
#include <limits.h>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int v[500400], n, l,m[800];
void citire()
{
    int i;
    f>>n;l=sqrt(n);
    for(i=1;i<=n;++i)
        f>>v[i];
    f.close();
}
void afisare()
{
    int i;
    for(i=1;i<=n;++i)
        g<<v[i]<<" ";
    g<<endl;
    g.close();
}

void minime ()
{ int i, j, x, h=1;
    for(j=1;j<=l+1;j++)
        for(i=1, x=INT_MAX;i<=l;i++, h++)
             if(v[h]>0)
                if(v[h]<x)  m[j]=h, x=v[h];
}
void batog()
{
    int i, h,j, ind, k=1;
    minime();
    while(k<=n)
    {   h=INT_MAX;m[0]=0;ind=-3;
        for(i=1;i<=l+1;i++)
            if(h>v[m[i]] && v[m[i]]>0)    ind=i,m[0]=m[i], h=v[m[i]];
        g<<v[m[0]]<<' ';
        v[m[0]]*=(-1);h=INT_MAX;
        if(ind>1)
            j=ind*(l-1)+1;
        else    j=1;
        if(ind!=-3)
            for(i=j;i<=ind*l;i++)
                if(v[i]>0)
                    if(v[i]<h)   m[ind]=i, h=v[i];
        k++;
    }
    g<<endl;
    afisare();
    g.close();
}
int main()
{
    citire();
    batog();
}