Pagini recente » Cod sursa (job #1026963) | Cod sursa (job #488541) | Cod sursa (job #2278165) | Cod sursa (job #2720349) | Cod sursa (job #1816420)
#include <fstream>
#include <algorithm>
int v[1<<19];
int n;
void heap_insert(int to_insert)
{
while(v[to_insert] > v[to_insert/2])
{
std::swap(v[to_insert],v[to_insert/2]);
to_insert/=2;
}
}
void heap_sort(int to_sort)
{
std::swap(v[0], v[n-to_sort-1]);
int child_index = 1;
while (child_index < n-to_sort-1)
{
if (child_index < n-to_sort-2 && v[child_index+1] > v[child_index])
++child_index;
std::swap(v[child_index/2], v[child_index]);
child_index*=2;
}
}
int main()
{
std::ifstream fin("algsort.in");
std::ofstream fout("algsort.out");
fin>>n;
for (int i = 0; i < n; ++i)
fin>>v[i];
for (int i = 0; i < n; ++i)
heap_insert(i);
for (int i = 0; i < n; ++i)
heap_sort(i);
for (int i = 0; i < n; ++i)
fout << v[i] << " ";
fout.close();
fin.close();
}