Pagini recente » Cod sursa (job #1725988) | Cod sursa (job #538932) | Cod sursa (job #541007) | Cod sursa (job #2796463) | Cod sursa (job #854977)
Cod sursa(job #854977)
#include <stdio.h>
using namespace std;
FILE*g;
int v[500010],i=1,heap[500010],n;
void print_sort(int A[500010])
{
int j;
for(j=1;j<i;j++)
fprintf (g,"%d ",A[j]);
}
void hp()
{
int k,aux;
k=i;
while (k>1 && v[k]>v[k/2] ) {
aux=v[k];
v[k]=v[k/2];
v[k/2]=aux;
k=k/2;
}
i++;
}
int maxim(int a,int b)
{
if (a>b) return a;
else return b;
}
int poz_maxim(int a,int b)
{
if (v[a]>v[b]) return a;
else return b;
}
void sort()
{
int dr=i-1,aux,k;
while(dr>=2)
{
aux=v[1];
v[1]=v[dr];
v[dr]=aux;
dr--;
k=1;
while((2*k+1<=dr) && (v[k]<maxim(v[2*k],v[2*k+1]))) {
int poz=poz_maxim(2*k,2*k+1);
aux=v[k];
v[k]=v[poz];
v[poz]=aux;
k=poz;
}
}
}
int main()
{
FILE*f;
f=fopen("algsort.in","r");
g=fopen("algsort.out","w");
fscanf(f,"%d",&n);
for(int k=1;k<=n;k++)
{
fscanf(f,"%d",&v[k]);
hp();
}
sort();
print_sort(v);
return 0;
}