Pagini recente » Cod sursa (job #1236251) | Cod sursa (job #1651217) | Cod sursa (job #2067164) | Cod sursa (job #2202517) | Cod sursa (job #2640030)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
int v[500001], n, n1;
void cinvec()
{
in>>n;
n1=n;
for(int i=1; i<=n; i++) in>>v[i];
}
void coutvec()
{
for(int i=1; i<=n; i++) out<<v[i]<<' ';
}
void upheap(int nod)
{
int w=2*nod;
while(w<=n1)
{
if(w+1<=n1 && v[w+1]>v[w]) ++w;
if(v[nod]>=v[w])
{
return;
}
swap(v[nod], v[w]);
nod=w;
w=2*nod;
}
}
void heapify()
{
for(int i=n1/2; i; i--)
upheap(i);
}
void heapsort()
{
heapify();
while(n1)
{
swap(v[n1], v[1]);
--n1;
upheap(1);
}
}
int main()
{
cinvec();
heapsort();
coutvec();
return 0;
}