Cod sursa(job #854992)

Utilizator RamaStanciu Mara Rama Data 14 ianuarie 2013 15:16:11
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 2.28 kb
#include <stdio.h>

using namespace std;
FILE*g;
int v[500010],i=1,heap[500010],n;

void print_sort(int A[500010])
{
    int j;
    for(j=1;j<i;j++)
        fprintf (g,"%d ",A[j]);
}
void hp()
{
    int k,aux;
    k=i;
    while (k>1 && v[k]>v[k/2]) {
                                    aux=v[k];
                                    v[k]=v[k/2];
                                    v[k/2]=aux;
                                    k=k/2;
                                }

    i++;

}

int maxim(int a,int b)
{
    if (a>b) return a;
        else return b;
}
int poz_maxim(int a,int b)
{
    if (v[a]>v[b]) return a;
        else return b;
}
void sort()
{
    int dr=i-1,aux,k;
    if(v[2]>v[1])
    {

    while(dr>=2)
    {
        aux=v[1];
        v[1]=v[dr];
        v[dr]=aux;
        dr--;
        k=1;
        while((2*k+1<=dr) && dr>=1 && (v[k]<maxim(v[2*k],v[2*k+1]))) {
                                                                int poz=poz_maxim(2*k,2*k+1);
                                                                aux=v[k];
                                                                v[k]=v[poz];
                                                                v[poz]=aux;
                                                                k=poz;
                                                        }
    }
    }
    else
    {
    while(dr>2)
    {
        aux=v[1];
        v[1]=v[dr];
        v[dr]=aux;
        dr--;
        k=1;
        while((2*k+1<=dr) && dr>=1 && (v[k]<maxim(v[2*k],v[2*k+1]))) {
                                                                int poz=poz_maxim(2*k,2*k+1);
                                                                aux=v[k];
                                                                v[k]=v[poz];
                                                                v[poz]=aux;
                                                                k=poz;
                                                        }
    }
    }
}
int main()
{
    FILE*f;
    f=fopen("algsort.in","r");
    g=fopen("algsort.out","w");
    fscanf(f,"%d",&n);
    for(int i=1;i<=n;i++)
    {
        fscanf(f,"%d",&v[i]);
        hp();
    }
    sort();
    print_sort(v);



    return 0;
}