Cod sursa(job #634111)

Utilizator Marius_mFMI-M2 Marius Melemciuc Marius_m Data 15 noiembrie 2011 18:04:19
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include<stdio.h>
#define dimensiune 500001
using namespace std;

void max_heapify(int a[dimensiune],int n,int i)                       // reface arborele pentru a fi structura de heap
{	int l,r,largest,aux;
	l=2*i;
	r=2*i+1;
	largest=i;
	if(l<=n&&a[l]>a[i])
		largest=l;
	if(r<=n&&a[r]>a[largest])
		largest=r;
	if(largest!=i)	{
		aux=a[i];
		a[i]=a[largest];
		a[largest]=aux;
		max_heapify(a,n,largest);
	}
}

void build_max_heap(int b[dimensiune],int nr_elemente)
{	int i;
	for(i=nr_elemente/2;i>=1;i--)
		max_heapify(b,nr_elemente,i);
}

void heapsort(int r[dimensiune],int nr)
{	int i,aux;
	build_max_heap(r,nr);
	for(i=nr;i>=2;i--)	{
		aux=r[1];
		r[1]=r[i];
		r[i]=aux;
		nr--;
		max_heapify(r,nr,1);              // sau build_max_heap(r,nr);
	}
}
int main()
{	int v[dimensiune],i,n;
	FILE *c,*d;
	c=fopen("algsort.in","r");
	d=fopen("algsort.out","w");
	fscanf(c,"%d",&n);
	for(i=1;i<=n;i++)
		fscanf(c,"%d",&v[i]); 
	heapsort(v,n);
	for(i=1;i<=n;i++)
		fprintf(d,"%d ",v[i]);
	fclose(c);
	fclose(d);
}