Cod sursa(job #628743)

Utilizator mihaibogdan10Mihai Bogdan mihaibogdan10 Data 1 noiembrie 2011 23:24:56
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<cstdio>
using namespace std;
FILE *in = fopen ("algsort.in", "r"), *out = fopen ("algsort.out", "w");

int a[500001], n;

void Coboara(int i, int n){
	int fiu, aux = a[i], gata = 0;	
	
	while (i <= n/2 && !gata){
		fiu = 2 * i;
		if (fiu + 1 <= n && a[fiu+1] > a[fiu]) fiu++;
		
		if (a[fiu] > a[i]){
			a[i] = a[fiu];
			i = fiu;
		}
		else gata = 1;
		a[i] = aux;
	}
}

void MinHeap(){
	for (int i = n/2; i >= 1; i--) Coboara(i, n);	
}

void HeapSort(){
	int i, aux;
	for (i = n; i >= 2; i--)
		if (a[1] > a[i]){
			aux = a[1];
			a[1] = a[i];
			a[i] = aux;
			Coboara (1, i-1);
		}
}
int main(){
	int i;
	fscanf (in, "%d", &n);
	for (i = 1; i <= n; i++) fscanf(in, "%d", &a[i]);
	
	MinHeap();
	HeapSort();
	
	for (i = 1; i <= n; i++) fprintf(out, "%d ", a[i]);
	fprintf (out, "\n");
	return 0;
}