Cod sursa(job #2073205)

Utilizator daniela12Sandu Daniela Teodora daniela12 Data 22 noiembrie 2017 19:59:56
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 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];
        ++v[i];
    }
    f.close();
}

void minime ()
{ int i, j, h=0, mi=INT_MAX;;
    for(i=1,j=1;i<=n;i++)
    {
        if(v[i]<mi) mi=v[i], m[j]=i;
        if(i%l==0)
            j++,mi=INT_MAX;
    }
}
void afisarem()
{
    for(int i=1;i<=l+1;i++)
        cout<<m[i]<<" ";
    cout<<endl;
}
void batog()
{
    int i, h,j, ind, k=1, x;
    minime();cout<<l<<endl;
    afisarem();
    while(k<n)
    {   h=INT_MAX;
        x=-1;
        ind=-3;
        for(i=1;i<=l+1;i++)
            if(v[m[i]]>0)
                if(h>v[m[i]])   ind=i, x=m[i], h=v[x];
        g<<h-1<<' ';
        v[x]*=(-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;
    g.close();
}
int main()
{
    citire();
    batog();
}