Pagini recente » Cod sursa (job #21928) | Cod sursa (job #2483736) | Cod sursa (job #1524205) | Cod sursa (job #2791151) | Cod sursa (job #1688238)
#include<fstream>
using namespace std;
int heap[500002],n,nr,i,x,aux;
void urcare(int nr)
{
int p,aux;
p=nr;
while(p/2>0)
{
if(heap[p/2]>heap[p])
{
aux=heap[p/2];
heap[p/2]=heap[p];
heap[p]=aux;
p=p/2;
}
else
{
break;
}
}
}
void coborare(int nr)
{
int p,aux,q;
p=1;
while(2*p<=nr)
{
q=2*p;
if(q+1<=nr && heap[q+1]<heap[q])
{
q++;
}
if(heap[q]<heap[p])
{
aux=heap[q];
heap[q]=heap[p];
heap[p]=aux;
p=q;
}
else
{
break;
}
}
}
int main()
{
ifstream fin("algsort.in");
ofstream fout("algsort.out");
fin>>n;
nr=0;
for(i=1;i<=n;i++)
{
fin>>x;
nr++;
heap[nr]=x;
urcare(nr);
}
while(nr>1)
{
fout<<heap[1]<<" ";
aux=heap[1];
heap[1]=heap[nr];
heap[nr]=aux;
nr--;
coborare(nr);
}
fout<<heap[1];
fin.close();
fout.close();
return 0;
}