Pagini recente » Cod sursa (job #1296884) | Cod sursa (job #2848992) | Cod sursa (job #1215695) | Cod sursa (job #2767866) | Cod sursa (job #449421)
Cod sursa(job #449421)
#include <stdio.h>
const char InFile[]="algsort.in";
const char OutFile[]="algsort.out";
const char RMode[]="r";
const char WMode[]="w";
const int MaxN=500005;
typedef unsigned long int UI32;
FILE *f;
UI32 v[MaxN],n;
UI32 stanga(UI32 i)
{
return i<<1;
}
UI32 dreapta(UI32 i)
{
return (i<<1)+1;
}
void reconstituire_heap(UI32 v[], UI32 i)
{
UI32 maxim=i,st=stanga(i),dr=dreapta(i);
if(st<=v[0])
if(v[st]>v[maxim])
maxim=st;
if(dr<=v[0])
if(v[dr]>v[maxim])
maxim=dr;
if(maxim!=i)
{
UI32 temp=v[i];
v[i]=v[maxim];
v[maxim]=temp;
reconstituire_heap(v,maxim);
}
}
void construiere_heap(UI32 v[])
{
for(register UI32 i=v[0]/2;i>0;--i)
{
reconstituire_heap(v,i);
}
}
void heapsort(unsigned long int v[])
{
UI32 temp;
construiere_heap(v);
while(v[0]>0)
{
temp=v[v[0]];
v[v[0]]=v[1];
v[1]=temp;
--v[0];
reconstituire_heap(v,1);
}
}
int main()
{
f=fopen(InFile,RMode);
fscanf(f,"%lu",&n);
v[0]=n;
for(register UI32 i=1;i<=n;++i)
{
fscanf(f,"%lu",&v[i]);
}
fclose(f);
heapsort(v);
f=fopen(OutFile,WMode);
for(register UI32 i=1;i<=n;++i)
{
fprintf(f,"%lu ",v[i]);
}
fclose(f);
return 0;
}