Cod sursa(job #659122)

Utilizator Marius_mFMI-M2 Marius Melemciuc Marius_m Data 10 ianuarie 2012 03:32:15
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include<stdio.h>
#define dimensiune 500001

using namespace std;

int heap[dimensiune],n;

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

void max_heapify_down(int nr,int i)                       // reface arborele pentru a fi structura de heap
{	
	int l,r,largest;
	l=i<<1;
	r=l+1;
	largest=i;
	if(l<=nr&&heap[l]>heap[i])
		largest=l;
	if(r<=nr&&heap[r]>heap[largest])
		largest=r;
	if(largest!=i)	
	{
		swap(heap[i],heap[largest]);
		max_heapify_down(nr,largest);
	}
}	

void build_max_heap()
{	
	int i;
	for(i=n>>1;i>=1;i--)
		max_heapify_down(n,i);
}

void heapsort()
{	
	int i,nre=n;
	build_max_heap();
	for(i=nre;i>=2;i--)	
	{ 
		swap(heap[1],heap[i]);
		nre--;
		max_heapify_down(nre,1);              // sau build_max_heap(r,nr);
	}
}
int main()
{	
	int i;
	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",&heap[i]); 
	heapsort();
	for(i=1;i<=n;i++)
		fprintf(d,"%d ",heap[i]);
	fclose(c);
	fclose(d);
}