Pagini recente » Cod sursa (job #2174725) | Cod sursa (job #2425141) | Cod sursa (job #872732) | Cod sursa (job #2368071) | Cod sursa (job #283367)
Cod sursa(job #283367)
#include <stdio.h>
int n, heap_size;
int *sir;
void read();
void sort();
void write();
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);
}
swap(sir[1], sir[heap_size]);
for (heap_size = n - 1; 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;
}