Cod sursa(job #587393)

Utilizator AnteusPatrascoiu Mihai Anteus Data 4 mai 2011 19:38:27
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <stdio.h>
#include <fstream.h>
ifstream fin("algsort.in");
FILE *g=fopen ("algsort.out", "w");
int n,i,v[500001];

void swap (int &a, int &b)
{
	a=a^b;
	b=a^b;
	a=a^b;
}

void downheap(int n, int k) {
int fiu;
do
{
	fiu=0;
	if (2*k<=n)							fiu=2*k;
	if (2*k+1<=n && v[2*k]<v[2*k+1])	fiu=2*k+1;
	if (v[fiu]<=v[k])					fiu=0;
	
	if (fiu)
	{
		swap(v[k], v[fiu]);
		k=fiu;
	}
}
while (fiu);
}

void build_heap(int n)
{
	for (int i=n/2;i>=1;i--)
		downheap(n, i);
}

void heap_sort(int n) {
build_heap(n);
for (int i=n;i>=2;i--)
{
	swap(v[i], v[1]);
	downheap(i-1, 1);
}
}

int main() {
fin>>n;
for (int i=1;i<=n;i++)
	fin>>v[i];

heap_sort(n);

for (int i=1;i<=n;i++)
	fprintf (g, "%d ", v[i]);
return 0;
}