Pagini recente » Cod sursa (job #3316558) | Cod sursa (job #438730) | Cod sursa (job #943296) | Cod sursa (job #1002157) | Cod sursa (job #358460)
Cod sursa(job #358460)
#include <fstream>
#define NMAX 500001
using namespace std;
long int a[NMAX],n,nh;
inline void swap(long &x,long &y)
{
long aux=x;
x=y;
y=aux;
}
void down(int x)
{
int y=x;
while(y)
{
y=0;
if(2*x<=nh)
{
y=2*x;
if(2*x+1<=nh&&a[2*x]<a[2*x+1])
y=2*x+1;
if(a[x]<a[y])
{
swap(a[x],a[y]);
x=y;
}
else
y=0;
}
}
}
void makeheap()
{
for(int i=nh/2;i>0;i--) down(i);
}
void heapsort()
{
while(nh)
{
swap(a[nh],a[1]);
nh--;
down(1);
}
}
int main()
{
ifstream f("algsort.in");
ofstream g("algsort.out");
f>>n;
int i;
nh=n;
for(i=1;i<=n;i++) f>>a[i];
makeheap();
heapsort();
for(i=1;i<=n;i++) g<<a[i]<<" ";
return 0;
}