Cod sursa(job #361760)

Utilizator bigdoggMic Matei bigdogg Data 6 noiembrie 2009 17:35:15
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream.h>

int n,v[500001];

void read(char file[20]);
void down(int k);

int main()
{
	int i,swap,nn;
	
	read("algsort.in");
	for(i=n/2;i>0;--i) down(i);

	nn=n;
	for(i=n;i>=2;--i)
	{
		swap=v[1]; v[1]=v[n]; v[n]=swap; --n;
		down(1);
	}
	n=nn;
	
	ofstream out("algsort.out");
	for(i=1;i<=n;++i) out<<v[i]<<' ';
	out.close();

	return 0;
}

void read(char file[20])
{
	int i;
	
	ifstream in(file);
	in>>n;
	for(i=1;i<=n;++i) in>>v[i];
	in.close();
}

void down(int k)
{
	int son,left,right,swap;
	
	do
	{
		son=0; left=2*k;
		if(left<=n)
		{
			son=left; right=left+1;
			if(right<=n && v[left]<v[right]) son=right;
			if(v[k]<v[son]){ swap=v[k]; v[k]=v[son]; v[son]=swap; k=son; }
			else son=0; 
		}
	}while(son);
}