Cod sursa(job #1041900)

Utilizator Robert29FMI Tilica Robert Robert29 Data 26 noiembrie 2013 12:52:39
Problema Sortare prin comparare Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include<stdio.h>
FILE*f=fopen("algsort.in","r");
FILE*g=fopen("algsort.out","w");
int n,v[1000001],nr;
void up(int nr)
{
	int k=v[nr];
	int nod=nr;
	while(k<v[nod/2])
	{
		v[nod]=v[nod/2];
		nod/=2;
	}
	v[nod]=k;
}
void down()
{
	int k=v[1];
	int nod=1;
	int fiu;
	while(1)
	{
		nod*=2;
		fiu=0;
		if((nod<=nr&&v[nod]<k)||(nod+1<=nr&&v[nod+1]<k))
			fiu=nod;
		if(nod+1<=nr&&v[nod]>v[nod+1])
			fiu=nod+1;
		if(fiu)
		{
			v[fiu/2]=v[fiu];
			nod=fiu;
		}
		else
			break;
	}
	v[nod/2]=k;

}
int main()
{
	fscanf(f,"%d",&n);
	for(int i=1;i<=n;++i)
	{
		fscanf(f,"%d",&v[i]);
		nr=i;
		up(nr);
	}
	for(int i=1;i<=n;++i)
	{
		fprintf(g,"%d ",v[1]);
		v[1]=v[nr--];
		down();
	}
	
	fclose(f);
	fclose(g);
	return 0;
}