Pagini recente » Cod sursa (job #1093585) | Cod sursa (job #517960) | Cod sursa (job #734835) | Cod sursa (job #3161378) | Cod sursa (job #820796)
Cod sursa(job #820796)
#include<stdio.h>
FILE *f = fopen("algsort.in","r");
FILE *g = fopen("algsort.out","w");
#define MaxN 500100
int N,L;
int A[MaxN];
inline void swap(int i,int j)
{
int aux = A[i];
A[i] = A[j];
A[j] = aux;
}
inline void heapUp(int poz)
{
for(;(poz>>1) && A[poz>>1] < A[poz];swap(poz>>1,poz),poz>>=1);
}
inline void addHeap(int a)
{
A[++L] = a;
heapUp(L);
}
void citire(void)
{
int a;
fscanf(f,"%d",&N);
for(int i=1;i<=N;i++)
{
fscanf(f,"%d",&a);
addHeap(a);
}
}
inline void heapDown(int poz)
{
int pozM;
for(;(poz<<1) <= L && (A[poz<<1] > A[poz] || A[(poz<<1)+1] > A[poz]);poz<<=1)
{
pozM = poz<<1;
if((poz<<1)+1 <= L && A[poz<<1] < A[(poz<<1)+1])
++pozM;
swap(poz,pozM);
}
}
void afisare(void)
{
for(int i=1;i<=N;i++)
printf("%d ",A[i]);
printf("\n");
}
void rezolvare(void)
{
for(int i=1;i<=N;i++)
{
swap(1,L--);
heapDown(1);
}
}
int main()
{
citire();
rezolvare();
for(int i=1;i<=N;i++)
fprintf(g,"%d ",A[i]);
fprintf(g,"\n");
}