Cod sursa(job #240225)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 7 ianuarie 2009 00:26:16
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
//heapsort recursiv
#include<stdio.h>
#define N 500001
int n,i,a[N];
void readd(),heap_sort(),hd(int ic,int nc),sw(int i1,int i2),prints();
int main()
{
	readd();
	heap_sort();
	prints();
	return 0;
}
void readd()
{
	freopen("algsort.in","rt",stdin);
	freopen("algsort.out","wt",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;i++)scanf("%d",&a[i]);
}
void heap_sort()
{
	for(i=n/2;i>=1;i--)hd(i,n);
	for(i=n;i>=1;i--){sw(1,i);hd(1,i-1);}
}
void hd(int ic,int nc)
{
	int is=ic<<1;
	if(is>nc)return;
	if(is<nc)if(a[is]<a[is+1])is++;
	if(a[ic]<a[is]){sw(is,ic);hd(is,nc);}
}
void sw(int i1,int i2)
{
	int aux=a[i1];a[i1]=a[i2];a[i2]=aux;
}
void prints()
{
	for(i=1;i<=n;i++)printf("%d ",a[i]);
}