Pagini recente » Cod sursa (job #1126330) | Cod sursa (job #2959596) | Cod sursa (job #569148) | Cod sursa (job #244650) | Cod sursa (job #373652)
Cod sursa(job #373652)
#include <fstream>
#include <algorithm>
unsigned int H[500000], heapsize;
inline unsigned int LEFT (unsigned int idx) { return (idx<<1)+1; }
inline unsigned int RIGHT (unsigned int idx) { return (idx<<1)+2; }
inline unsigned int PARENT (unsigned int idx) { return (idx-1)>>1; }
void make_heap ()
{
for (i=0; LEFT(i) < heapsize; ++i) heapify(i);
}
void heapify (unsigned int idx)
{
unsigned int idx2;
while (LEFT(idx) < heapsize) {
idx2=idx;
if (H[LEFT(idx)] > H[idx2]) idx2 = LEFT(idx);
if (RIGHT(idx) < heapsize && H[RIGHT(idx)] > H[idx2]) idx2 = RIGHT(idx);
if (idx2 != idx) { std::swap(H[idx], H[idx2]); idx = idx2; }
else break;
}
}
int main ()
{
unsigned int N;
std::ifstream fin("algsort.in");
std::ofstream fout("algsort.out");
for (i=0; i<N; ++i) fin >> H[i];
make_heap();
while (heapsize) { std::swap(H[0], H[--heapsize]); heapify(0); }
for (i=0; i<N; ++i) fout << H[i] << ' ';
fout << '\n';
return 0;
}