Cod sursa(job #1041957)

Utilizator stanescu.raduRadu Stanescu stanescu.radu Data 26 noiembrie 2013 13:35:39
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<fstream>
#include<iostream>
#include<algorithm>

using namespace std;

int v[500005],n,i,k,x,j;
ifstream f ("algsort.in");
ofstream g("algsort.out");

void add(int x, int &k)
{
	v[++k]=x;
	if (k==1) return;
	else 
	{
		int i=k;
		while (v[i]<v[i/2] && i/2) 
		{
			swap(v[i],v[i/2]);
			i=i/2;
		}
	}
}

int remove(int x, int &k)
{
	int minim=v[1], st, dr;
	swap(v[1],v[k]);
	k--;
	int i=1, poz=-1;
	do
	{
		st=2*i, dr=2*i+1;
		poz=-1;
		if (st<=k)
			poz=st;
		if (poz!=-1 && dr<=k && v[dr]<v[poz])
			poz=dr;
		if (poz!=-1)
		{
			if (v[i]>v[poz]) 
			{
				swap(v[i],v[poz]);
				i=poz;
			}
			else poz=-1;
		}
	} while (poz!=-1);
	return minim;
}

int main ()
{
	f>>n;
	k=0;
	for (i=1;i<=n;i++)
	{
		f>>x;
		add(x,k);
	}
	for (i=1;i<=n;i++)
	{
		//for (j=1;j<=k;j++) cout<<v[j]<<" ";
		x=remove(1,k);
		g<<x<<" ";
		//for (j=1;j<=k;j++) cout<<v[i]<<" ";
		//cout<<"\n";
	}
	f.close();
	g.close();
	return 0;
}