Pagini recente » Cod sursa (job #2939949) | Cod sursa (job #338153) | Cod sursa (job #1035702) | Cod sursa (job #404624) | Cod sursa (job #704936)
Cod sursa(job #704936)
//heapsort
#include <cstdio>
using namespace std;
int i,j,n,a[500001],nn;
void swap(int &x,int &y);
int max(int x,int y);
int main(){
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;++i){
scanf("%d",&a[i]);
j=i;
while(a[j]>a[j/2]&j>1) swap(a[j],a[j/2]),j/=2;
}
nn=n;
while(n){
swap(a[n],a[1]);
--n;
i=1;
while((a[i]<a[2*i]||a[i]<a[2*i+1])&&2*i<n){
j=max(2*i,2*i+1);
swap(a[i],a[j]);
i=j;
}
}
for(i=1;i<=nn;++i) printf("%d ",a[i]);
printf("\n");
return 0;
}
int max(int x,int y){
if(y>n) return x;
if(a[x]>a[y]) return x;
else return y;
}
void swap(int &x,int &y){
int aux=x;
x=y;
y=aux;
return;
}