Cod sursa(job #595094)

Utilizator balakraz94abcd efgh balakraz94 Data 11 iunie 2011 10:06:35
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<cstdio>
#include<vector>
#include<algorithm>
#define infile "algsort.in"
#define outfile "algsort.out"
#define n_max 500005
using namespace std;


void sift(int);
void heap();


vector <int> a(1);
int n,N;


void citeste()
{
	freopen(infile,"r",stdin);
	
	scanf("%d",&n);
	
	int x;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&x);
		a.push_back(x);
	}
	
	fclose(stdin);
}


void sort()
{
	N=n;
	
	heap();
	
	for(int i=N;i>=2;i--)
	{
		swap(a[i],a[1]);
		
		N--;
		
		sift(1);;
	}
}



void heap()
{
	for(int i=N>>1;i;i--)
		sift(i);
}



void sift(int k)
{
	int son=k,l,r;
	
	l=k<<1;
	r=l+1;
	
	if(l<=N && a[l] > a[k])
		son = l;
	
	if(r<=N && a[r]> a[son])
		son = r;
	
	if(son!=k)
	{
		swap(a[son],a[k]);
		
		sift(son);
	}
}



void afiseaza()
{
	freopen(outfile,"w",stdout);
	
	for(int i=1;i<=n;i++)
		printf("%d ",a[i]);
	
	fclose(stdout);
}


int main()
{
	citeste();
	
	sort();
	
	afiseaza();
	
	return 0;
}