Cod sursa(job #1809057)

Utilizator gorneanu.andreiFMI Gorneanu Andrei gorneanu.andrei Data 18 noiembrie 2016 16:57:09
Problema Sortare prin comparare Scor 20
Compilator c Status done
Runda Arhiva educationala Marime 1.59 kb
#include <stdio.h>
#define MAXN 800001
int heap[MAXN],v[MAXN];

int main(){

    int n, i, m = 0, aux, j, k;
    FILE *f, *g;
    f=fopen("algsort.in","r");
    g=fopen("algsort.out","w");

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


    for(i = n / 2;i >= 1; --i){
        j = i;
        while((v[j] < v[j * 2] || v[j] < v[j * 2 + 1])){
                if(v[j * 2] > v[j * 2 + 1] && j * 2 <= n){
                aux = v[j];
                v[j] = v[j * 2];
                v[j * 2] = aux;
                j = j * 2;
            }
            else
                if(j * 2 + 1 <= n)
                {
                aux = v[j];
                v[j] = v[j * 2 + 1];
                v[j * 2 + 1] = aux;
                j = j * 2 + 1;
            }
        }
    }


    m = n;

    while(n > 1){
        aux = v[1];
        v[1] = v[n];
        v[n] = aux;
        --n;

      for(i = n / 2;i >= 1; --i){
        j = i;
        while((v[j] < v[j * 2] || v[j] < v[j * 2 + 1]) && 2 * j <= n && 2 * j + 1 <= n){
                if(v[j * 2] > v[j * 2 + 1] && j * 2 <= n){
                aux = v[j];
                v[j] = v[j * 2];
                v[j * 2] = aux;
                j = j * 2;
            }
            else
                if(j * 2 + 1 <= n)
                {
                aux = v[j];
                v[j] = v[j * 2 + 1];
                v[j * 2 + 1] = aux;
                j = j * 2 + 1;
            }
        }

    }
    }

        for(i = 1;i <= m; ++i)
            fprintf(g,"%d ",v[i]);

return 0;
}