Pagini recente » Cod sursa (job #1113944) | Cod sursa (job #1670060) | Cod sursa (job #79724) | Cod sursa (job #2046182) | Cod sursa (job #828183)
Cod sursa(job #828183)
#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 &a,int &b)
{
int aux = a;
a = b;
b = aux;
}
inline void heapUp(int poz)
{
for(;poz-1 && A[poz>>1] < A[poz];swap(A[poz>>1],A[poz]),poz>>=1);
}
inline void addHeap(int a)
{
A[++L] = a;
heapUp(L);
}
void citire(void)
{
int a;
fscanf(f,"%d\n",&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]) || ((poz<<1)+1 <= L && A[(poz<<1)+1] > A[poz]);poz = pozM)
{
pozM = poz<<1;
if((poz<<1)+1 <= L && A[pozM] < A[pozM+1])
++pozM;
swap(A[poz],A[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(A[1],A[L--]);
heapDown(1);
}
}
int main()
{
citire();
rezolvare();
for(int i=1;i<=N;i++)
fprintf(g,"%d ",A[i]);
fprintf(g,"\n");
}