Cod sursa(job #825581)

Utilizator maritimCristian Lambru maritim Data 29 noiembrie 2012 11:24:21
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include<stdio.h>

FILE *f = fopen("algsort.in","r");
FILE *g = fopen("algsort.out","w");

#define MaxN 1200100
#define INF (1<<31)
#define mij ((li+ls)>>1)

int N;
int AINT[MaxN];

void initializare(void)
{
    for(int i=0;i<MaxN;i++)
        AINT[i] = INF;
}

inline int min(int a,int b)
{
    return a < b ? a : b;
}

inline int pozAINT(int li,int ls,int poz)
{
    if(li == ls)
        return li;

    if(AINT[poz] == AINT[poz<<1])
        return pozAINT(li,mij,poz<<1);
    else
        return pozAINT(mij+1,ls,(poz<<1)+1);
}

inline void insertAINT(int li,int ls,int poz,int poz2,int val)
{
    if(li == ls)
    {
        AINT[poz] = val;
        return ;
    }

    if(poz2 <= mij)
        insertAINT(li,mij,poz<<1,poz2,val);
    else
        insertAINT(mij+1,ls,(poz<<1)+1,poz2,val);

    AINT[poz] = min(AINT[poz<<1],AINT[(poz<<1)+1]);
}

void citire(void)
{
    int a;
    initializare();

    fscanf(f,"%d",&N);
    for(int i=1;i<=N;i++)
    {
        fscanf(f,"%d",&a);
        insertAINT(1,N,1,i,a);
    }
}

void afisare(void)
{
    for(int i=1;i<=16;i++)
        printf("%d ",AINT[i]);

    printf("\n");
}

void sortare(void)
{
    for(int i=1;i<=N;i++)
    {
        fprintf(g,"%d ",AINT[1]);
        insertAINT(1,N,1,pozAINT(1,N,1),INF);
    }
}

int main()
{

    citire();
    sortare();
}