Pagini recente » Cod sursa (job #1694139) | Cod sursa (job #620265) | Cod sursa (job #1676053) | Cod sursa (job #161669) | Cod sursa (job #1683824)
#include <stdio.h>
int fiulStang(int radacina)
{
return radacina * 2 + 1;
}
int fiulDrept(int radacina)
{
return radacina * 2 + 2;
}
void swap(int *a, int *b)
{
int aux;
aux = *b;
*b = *a;
*a = aux;
}
void shift(int n, int nod, int *heap)
{
int 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()
{
int i, n, *arr;
FILE *in = fopen("algsort.in", "r");
FILE *out = fopen("algsort.out", "w");
fscanf(in, "%d", &n);
arr = (int *) malloc(n * sizeof(int));
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;
}