Pagini recente » Cod sursa (job #1666753) | Monitorul de evaluare | Cod sursa (job #931753) | Cod sursa (job #2611814) | Cod sursa (job #1042967)
#include <fstream>
using namespace std;
ifstream cin("algsort.in");
ofstream cout("algsort.out");
int n, m, i, h[500001], v[500001], k;
void push(int i)
{
while(h[i/2]>h[i] && i>1)
{
swap(h[i/2], h[i]);
i/=2;
}
}
int minim(int i)
{
if(i*2>m) return 0;
else
{
if(i*2+1>m) return i*2;
if(h[i*2]<h[i*2+1]) return i*2;
return i*2+1;
}
}
void pop(int m)
{
int j, i=1;
v[++k]=h[1];
h[1]=h[m];
j=minim(i);
while(i<=m && h[i]>h[j] && j)
{
swap(h[i], h[j]);
i=j;
j=minim(i);
}
}
int main()
{
cin>>n;
for(i=1; i<=n; i++)
{
cin>>h[i];
push(i);
}
for(m=n; m>0; m--) pop(m);
for(i=1; i<=n; i++) cout<<v[i]<<" ";
return 0;
}