Cod sursa(job #854977)

Utilizator RamaStanciu Mara Rama Data 14 ianuarie 2013 15:02:07
Problema Sortare prin comparare Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.59 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;
    while(dr>=2)
    {
        aux=v[1];
        v[1]=v[dr];
        v[dr]=aux;
        dr--;
        k=1;
        while((2*k+1<=dr) && (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 k=1;k<=n;k++)
    {
        fscanf(f,"%d",&v[k]);
        hp();
    }
    sort();
    print_sort(v);



    return 0;
}