Cod sursa(job #613572)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 30 septembrie 2011 18:53:57
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream.h>
ifstream f("algsort.in");
ofstream g("algsort.out");
int n,heap[500001];

void tipar(){
	for(register int i=1;i<=n;i++)
		g<<heap[i]<<" ";
}

int main(void){
	register int i,j,q;
	
	f>>n;
	int u=0;
	//I:construim heapul
	for(i=1;i<=n;i++){
		f>>q;
		heap[++u]=q;
		int c=u,p=c/2;
		while(p>=1 && heap[c]>heap[p]){
			register int aux=heap[c];
			heap[c]=heap[p];
			heap[p]=aux;
			c=p;
			p/=2;
		}
	}
	f.close();
	
	//II:sortarea pr-zisa
	
	for(i=n;i>0;i--){
		register int aux=heap[1];
		heap[1]=heap[i],heap[i]=aux;
		int p=1,c=2*p;
		if(c+1<=i-1 && heap[c]<heap[c+1])
			c++;
		while(heap[p]<heap[c] && c<=i-1){
			aux=heap[p],heap[p]=heap[c],heap[c]=aux;
			p=c;
			c*=2;
			if(c+1<=i-1 && heap[c]<heap[c+1])
				c++;
		}
	}
	
	tipar();
	return 0;
}