Pagini recente » Cod sursa (job #141756) | Cod sursa (job #1572557) | Cod sursa (job #2362449) | Cod sursa (job #2257040) | Cod sursa (job #1683848)
#include <stdio.h>
long fiulStang(long radacina)
{
return radacina * 2 + 1;
}
long fiulDrept(long radacina)
{
return radacina * 2 + 2;
}
void swap(long *a, long *b)
{
long aux;
aux = *b;
*b = *a;
*a = aux;
}
void shift(long n, long nod, long *heap)
{
long fiu;
do {
fiu = 0;
if(fiulStang(nod) < n) {
fiu = fiulStang(nod);
if(fiulDrept(nod) < n && heap[fiulDrept(nod)] > heap[fiulStang(nod)])
fiu = fiulDrept(nod);
if(heap[nod] >= heap[fiu])
fiu = 0;
}
if(fiu) {
swap(&heap[nod], &heap[fiu]);
nod = fiu;
}
} while( fiu );
}
int main()
{
long i, n, *arr;
FILE *in = fopen("algsort.in", "r");
FILE *out = fopen("algsort.out", "w");
fscanf(in, "%d", &n);
arr = (long *) malloc(n * sizeof(long));
for(i = 0; i < n; ++i)
fscanf(in, "%d", &arr[i]);
for(i = n / 2; i >= 0; --i)
shift(n, i, arr);
for(i = n - 1; i > 0; --i) {
swap(&arr[i], &arr[0]);
shift(i - 1, 0, arr);
}
for(i = 0; i < n; ++i)
fprintf(out, "%d ", arr[i]);
fclose(out);
fclose(in);
return 0;
}