Cod sursa(job #405166)

Utilizator vasilemureVasile Mure vasilemure Data 27 februarie 2010 18:34:57
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <stdio.h>

#define Nmax 500005
#define INF (1<<31) - 1

long n, i, j, aux, N, c;
long v[Nmax];


void UP (int i){
	aux = v[i];
	while (v[i>>1] < aux){
		v[i] = v[i>>1];
		i = i >> 1;
	}
	v[i] = aux;
}

void DOWN (int i){
	aux = v[i];
	c = 2 * i;
	while (c < n){
		
		if (v[c + 1] > v[c] && (c + 1) <= n)
			j = c + 1;
		else 
			j = c;
		
		if (v[i] < v[j]){
			aux = v[i];
			v[i] = v[j];
			v[j] = aux;
		}
		else 
			break;
		
		i = j;
		c = 2 * i;
	}
	
}

int main (){
	
	FILE * f = fopen ("algsort.in", "r");
	FILE * g = fopen ("algsort.out", "w");
	
	v[0] = INF;
	
	fscanf (f, "%ld", &n);
	
	N = n;
		
	for (i = 1 ; i <= n ; i++){
		fscanf (f, "%ld", &v[i]);
		UP(i);
	}
	
	for (n ; n >= 2 ; ){
		aux = v[1];
		v[1] = v[n];
		v[n] = aux;
		
		n--;
		
		DOWN(1);
	}

	for (i = 1 ; i <= N ; i++)
		fprintf(g, "%ld ", v[i]);
	
	fclose(f);
	fclose(g);
	return 0;
}