Pagini recente » Cod sursa (job #1520068) | Cod sursa (job #2024176) | Cod sursa (job #995743) | Cod sursa (job #1984969) | Cod sursa (job #554989)
Cod sursa(job #554989)
#include <cstdio>
using namespace std;
#define NMAX 500001
FILE *fin=fopen("algsort.in","r");
FILE *fout=fopen("algsort.out","w");
int H[NMAX],n;
void swap(int &x,int &y)
{
int ax=x;
x=y;
y=ax;
}
void upheap(int i)
{
if(i>1)
{
if(H[i/2]>H[i])
{
swap(H[i],H[i/2]);
upheap(i/2);
}
}
}
void dwheap(int i)
{
if(2*i<=n)
{
int y=2*i;
if(y+1<=n&&H[y+1]<H[y])
++y;
if(H[y]<H[i])
{
swap(H[y],H[i]);
dwheap(y);
}
}
}
int main()
{
int i;
fscanf(fin,"%d",&n);
for(i=1;i<=n;i++)
{
fscanf(fin,"%d",&H[i]);
upheap(i);
}
while(n>0)
{
fprintf(fout,"%d ",H[1]);
swap(H[1],H[n]);
H[n]=0;
--n;
dwheap(1);
}
return 0;
}