Cod sursa(job #634369)

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

void max_heapify(int a[100],int n,int i)                       // reface arborele pentru a fi structura de heap
{	int l,r,largest,aux,k=1;
	while(k==1)	{
		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;
			i=largest;
		}
		else
			k=0;
	}
}

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);
}