Pagini recente » Cod sursa (job #276570) | Cod sursa (job #3215049) | Cod sursa (job #1563387) | Cod sursa (job #2635521) | Cod sursa (job #778947)
Cod sursa(job #778947)
#include<cstdio>
using namespace std;
int i, a[500001], n, n2, aux;
void comp(int i) {int aux; if (i>1) {
if (a[i]<a[i/2])
{aux=a[i]; a[i]=a[i/2]; a[i/2]=aux; comp(i/2);}
}}
void heap(int i) {int aux; if (2*i<n) {
if ((a[2*i]<a[2*i+1])&&(a[2*i]<a[i])) {
aux=a[i]; a[i]=a[2*i]; a[2*i]=aux;
heap(2*i);
} else if (a[2*i+1]<a[i]) {
aux=a[i]; a[i]=a[2*i+1]; a[2*i+1]=aux;
heap(2*i+1);
}
}}
int main(){
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d", &n); n2=n;
for (i=1;i<=n;i++) {scanf("%d", &a[i]); comp(i);}
for (i=1;i<=n2;i++) {
printf("%d ", a[1]); a[1]=a[n]; a[n]=-1; n--;
heap(1); if (n==2) if (a[1]>a[2]) {aux=a[2]; a[2]=a[1]; a[1]=aux;}
}
printf("\n"); return 0;
}