Pagini recente » Cod sursa (job #2184827) | Cod sursa (job #1765910) | Cod sursa (job #1842100) | Cod sursa (job #705878) | Cod sursa (job #283486)
Cod sursa(job #283486)
#include <stdio.h>
int n, heap_size;
int *sir;
void read();
void sort();
void write();
void move_up(int);
void move_down(int);
inline void swap(int&, int&);
int main()
{
read();
sort();
write();
return 0;
}
void move_down(int tata)
{
int fiu, val_tata = sir[tata];
for (fiu = tata * 2; fiu <= heap_size; fiu *= 2)
{
if (fiu < heap_size)
{
if (sir[fiu+1] > sir[fiu])
{
++fiu;
}
}
if (val_tata >= sir[fiu])
{
break;
}
sir[fiu/2] = sir[fiu];
}
fiu /= 2;
sir[fiu] = val_tata;
}
void sort()
{
int i;
heap_size = n;
for (i = n / 2; i > 1; --i)
{
move_down(i);
}
for (heap_size = n; heap_size >= 1; --heap_size)
{
move_down(1);
swap(sir[1], sir[heap_size]);
}
}
void read()
{
int i;
FILE *fin = fopen ("algsort.in", "r");
fscanf (fin, "%d", &n);
sir = new int[n+1];
for (i = 1; i <= n; ++i)
{
fscanf (fin, "%d", &sir[i]);
}
fclose (fin);
}
void write()
{
int i;
FILE *fout = fopen ("algsort.out", "w");
for (i = 1; i <= n; ++i)
{
fprintf (fout, "%d ", sir[i]);
}
fprintf (fout, "\n");
fclose (fout);
}
inline void swap(int &a, int &b)
{
int t = a;
a = b;
b = t;
}