Cod sursa(job #556799)

Utilizator n3msizN3msiz n3msiz Data 16 martie 2011 12:25:17
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include<stdio.h>

int n,i,p,c,v[500010],aux;

int main(){
	FILE*f=fopen("algsort.in","r");
	FILE*g=fopen("algsort.out","w");
	
	fscanf(f,"%d",&n);
	for(i=1;i<=n;i++)
		fscanf(f,"%d",&v[i]);
	
	for(i=2;i<=n;i++){
		c=i;
		p=i/2;
		aux=v[c];
		while(aux>v[p] && p>=1){
			v[c]=v[p];
			c=p;
			p/=2;
		}
		v[c]=aux;
	}

	for(i=n;i>=2;i--){
		aux=v[i];
		v[i]=v[1];
		v[1]=aux;
		p=1;
	
		while(2*p<i-1){
			c=p*2;
			if(v[c]<=v[c+1])
				c++;
			if(v[p]<v[c]){
				aux=v[c];
				v[c]=v[p];
				v[p]=aux;
				p=c;
				
			}
			else 
				break;
		}
		
	}

	if(v[1]>v[2]){
		aux=v[1];
		v[1]=v[2];
		v[2]=aux;
	}
	
	for(i=1;i<=n;i++)
		fprintf(g,"%d ", v[i]);
	
	fclose(f);
	fclose(g);
	return 0;
}