Pagini recente » Cod sursa (job #1865167) | Cod sursa (job #2886228) | Cod sursa (job #2575284) | Cod sursa (job #181986) | Cod sursa (job #550445)
Cod sursa(job #550445)
#include <fstream>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
const int N = 500001;
int n;
int v[N];
void Read()
{
in >> n;
for (int i = 1; i <= n; ++i)
in >> v[i];
}
inline void Swap(int a, int b)
{
v[a] ^= v[b] ^= v[a] ^= v[b];
}
void Sink(int node)
{
int maxNode = node*2;
if (maxNode > n)
return;
if (v[maxNode] > v[maxNode+1] && maxNode+1 <= n)
++maxNode;
if (v[node] > v[maxNode])
{
Swap(node, maxNode);
Sink(maxNode);
}
}
void BuildHeap()
{
for (int i = n/2; i; --i)
Sink(i);
}
void GetOrder()
{
while(n)
{
out << v[1] << " ";
Swap(1, n);
n--;
Sink(1);
}
}
int main()
{
Read();
BuildHeap();
GetOrder();
return 0;
}