Pagini recente » Cod sursa (job #2080643) | Cod sursa (job #713786) | Cod sursa (job #1294376) | Istoria paginii utilizator/serban_petre | Cod sursa (job #1043262)
#include <iostream>
#include <stdio.h>
using namespace std;
int a[500001],n;
void interschimba(int &x,int &y){
int aux;
aux=x;
x=y;
y=aux;
}
void Batog(int a[],int n)
{
int i,ok=1,pozitie=0;
i=1;
while(ok==1){
if(2*i<=n && 2*i+1<=n)
{
if(a[2*i]<a[2*i+1])
pozitie=2*i;
else
pozitie=2*i+1;
if(a[i]<a[pozitie])
pozitie=0;
}
else
if(2*i<=n && a[2*i]<a[i])
pozitie=2*i;
else
if(2*i+1<=n && a[2*i+1]<a[i])
pozitie=2*i+1;
if(pozitie==0)
ok=0;
else
{
interschimba(a[i],a[pozitie]);
i=pozitie;
pozitie=0;
}
}
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
int i,pozitie,x;
scanf("%d%d",&n,&a[1]);
for(i=2;i<=n;i++)
{
scanf("%d",&a[i]);
x=i;pozitie=i/2;
while(pozitie>=1)
{
if(a[x]<a[pozitie])
interschimba(a[x],a[pozitie]);
x=pozitie;
pozitie=pozitie/2;
}
}
while(n>1){
printf("%d ",a[1]);
a[1]=a[n];
n--;
if(n>1)
Batog(a,n);
}
printf("%d",a[1]);
return 0;
}