Cod sursa(job #778944)

Utilizator BlueStrutAndrei Prahoveanu BlueStrut Data 16 august 2012 12:25:52
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<cstdio>
using namespace std;
int i, a[1001], 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;
}