Cod sursa(job #1314302)

Utilizator danielmaxim95FMI Maxim Daniel danielmaxim95 Data 11 ianuarie 2015 18:56:04
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
//BatogSort
#include <cstdio>
#include <math.h>

using namespace std;

int v[500003], s[710], n, rn, ns, sv[500003], k=0;

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

void cautas()
{
    int m=s[0],p=0, i;
    for(i=1; i<ns; i++)
        if(m>s[i])
        {
            m=s[i];
            p=i;
        }
    sv[k++]=m;
    s[p] = minv(p);
}

int main()
{
    int i;
    FILE *f = fopen("algsort.in", "r");

    fscanf(f, "%d", &n);
    for(i=1; i<=n; i++)
        fscanf(f, "%d", &v[i]);
    fclose(f);

    rn = sqrt(n);
    ns = rn;
    if(rn*rn<n)
        ns++;
    if(rn*ns<n)
        ns++;

    for(i=0; i<ns; i++)
        s[i] = minv(i);
    for(i=1; i<=n; i++)
        cautas();

    f=fopen("algsort.out","w");
    for(i=0; i<n; i++)
        fprintf(f, "%d ", sv[i]);
    fclose(f);
    return 0;
}