Cod sursa(job #661195)

Utilizator DaicuDaicu Alexandru Daicu Data 13 ianuarie 2012 23:03:46
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<stdio.h>
#define nmax 200020
int heap[nmax],lg_heap;

void add(int &lg_heap,int num){
	++lg_heap;
	int ppoz=lg_heap;
	while(ppoz>1 && num<heap[ppoz/2]){
		heap[ppoz]=heap[ppoz/2];
		ppoz=ppoz/2;
	}
	heap[ppoz]=num;
}

void del(int &lg_heap,int ppoz,int num){
	heap[ppoz]=heap[lg_heap];
	lg_heap--;
	int test,pfiu;
	do{
		test=0;
	if(ppoz*2<=lg_heap){
		pfiu=ppoz*2;
		if(pfiu+1<=lg_heap && heap[pfiu]>heap[pfiu+1])
			pfiu++;
		if( heap[pfiu]<heap[ppoz])
		test=1;
	}
	if(test!=0){
		heap[ppoz]=heap[pfiu];
	    heap[pfiu]=heap[lg_heap+1];
		ppoz=pfiu;
	}
	}while(test);
}
	
int main(){
	freopen("algsort.in","r",stdin);
	freopen("algsort.out","w",stdout);
	int n,x;
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&x);
		add(lg_heap,x);
	}
	for(int i=1;i<=n;i++){
		printf("%d ",heap[1]);
		del(lg_heap,1,heap[1]);
	}
	return 0;
}