Pagini recente » Cod sursa (job #635417) | Cod sursa (job #78608) | Cod sursa (job #326415) | Cod sursa (job #3134455) | Cod sursa (job #651707)
Cod sursa(job #651707)
#include <fstream>
using namespace std;
ifstream fi ("algsort.in");
ofstream fo ("algsort.out");
const int dim = 500005;
int N, A[dim];
void cit ()
{
fi >> N;
for (int i = 1; i <= N; i++)
fi >> A[i];
}
void upheap (int H[])
{
int f = H[0], t = H[0] >> 1;
while (t != 0 && H[f] > H[t])
{
swap (H[t], H[f]);
f = t;
t = f >> 1;
}
}
void downheap (int H[])
{
int t = 1, f = 2;
if (3 <= H[0] && H[3] > H[2])
f++;
while (f <= H[0] && H[f] > H[t])
{
swap (H[t], H[f]);
t = f;
f = t << 1;
if (f+1 <= H[0] && H[f+1] > H[f])
f++;
}
}
void heapsort (int *A, int *B)
{
int H[dim];
for (H[0] = 1; H[0] <= B - A; H[0]++)
{
H[H[0]] = A[H[0]-1];
upheap (H);
}
H[0]--;
while (H[0] > 0)
{
A[H[0]-1] = H[1];
H[1] = H[H[0]--];
downheap (H);
}
}
void afi ()
{
for (int i = 1; i <= N; i++)
fo << A[i] << ' ';
}
int main ()
{
cit ();
heapsort (A + 1, A + N + 1);
afi ();
return 0;
}