Cod sursa(job #1174251)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 22 aprilie 2014 14:07:49
Problema Sortare prin comparare Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.15 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXN 500000
int n, v[MAXN+1];
inline void cadere(int poz){
    int f, fiu1, fiu2, q, aux;
    f=1;
    while(f==1){
        fiu1=(poz<<1)+1;
        fiu2=(poz<<1)+2;
        q=MAXN;
        if(fiu2<n){
            q=fiu2;
        }
        if((fiu1<n)&&(v[q]<v[fiu1])){
            q=fiu1;
        }
        if(v[q]>v[poz]){
            aux=v[poz];
            v[poz]=v[q];
            v[q]=aux;
        }else{
            f=0;
        }
    }
}
inline void heapify(){
    int i;
    for(i=(n-1)>>1; i>=0; i--){
        cadere(i);
    }
}
inline void heapSort(){
    int aux;
    while(n>0){
        n--;
        aux=v[n];
        v[n]=v[0];
        v[0]=aux;
        cadere(0);
    }
}
int main(){
    int i;
    FILE *fin,*fout;
    fin=fopen("algsort.in","r");
    fout=fopen("algsort.out","w");
    fscanf(fin, "%d", &n);
    for(i=0; i<n; i++){
        fscanf(fin, "%d", &v[i]);
    }
    heapify();
    heapSort();
    n=i;
    for(i=0; i<n; i++){
        fprintf(fout, "%d ", v[i]);
    }
    fprintf(fout, "\n");
    fclose(fin);
    fclose(fout);
    return 0;
}