Cod sursa(job #410414)

Utilizator Cristy94Buleandra Cristian Cristy94 Data 4 martie 2010 13:01:34
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include<stdio.h>
FILE *f=fopen("algsort.in","r");
FILE *g=fopen("algsort.out","w");
int i,a[500001],n,m,p;
void combheap(int i, int n){
	int s,d;
	while(2*i<=n){ //parcurgem copiii pana nu gasim unul mai mare
		 s=2*i; d=2*i+1; //copiii sunt 2*i si 2*i+1
		  m=i; // pozitia in care se gaseste maximul este m
		if( a[m]<a[s] )
			  m=s;   // daca maximul este copilul stang
	    if(d<=n&&a[m]<a[d] )
	         m=d; // daca maximul este copilul drept, si acesta exista
	  if(m!=i){ //daca maxim-ul nu este in nod-ul curent
		 int t=a[i];  //interschimbam valorile din nod-ul curent si maxim
		 a[i]=a[m];
		 a[m]=t;
		 i=m;
	  }
	  else break;
	}
}
int main(){
fscanf(f,"%d",&n);
for(i=1;i<=n;i++)
	fscanf(f,"%d",&a[i]);
for(i=n/2;i>=1;i--)
	 combheap(i,n);
int x;
for(i=1;i<n;i++)
{  x=a[1];
  a[1]=a[n-i+1];
  a[n-i+1]=x;
  combheap(1,n-i);
}
for(i=1;i<=n;i++)
	fprintf(g,"%d ",a[i]);
return 0;
}