Cod sursa(job #1552983)

Utilizator rptomaToma Radu-Petrescu rptoma Data 18 decembrie 2015 23:50:06
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>
using namespace std;

long a[500000],i,x,nr,n;
ifstream f("algsort.in");
ofstream g("algsort.out");

void insert_heap(long a[], long n, long x)
{
    int p,t;
    p=n;
    if(n==1) a[1]=x;
    else
    {
        while(p>1)
        {
            t=p/2;
            if(x<a[t])
            {
                a[p]=x;
                break;
            }
            else
            {
                a[p]=a[t];
                a[t]=x;
                p=t;
            }
        }
    }
}

void remove_heap(long a[], long n){
    int i;
    if(n==2 && a[1]>a[2]) swap(a[1],a[n]);
    else if(n!=2){
        swap(a[1],a[n]);
        n--;
        i=1;
        while(i<=n){
            if(a[i*2]>a[i*2+1] && a[i]<a[i*2] && i*2<=n){
                swap(a[i],a[i*2]);
                i=i*2;
            }
            else if(a[i*2+1]>=a[i*2] && a[i]<=a[i*2+1] && i*2+1<=n){
                swap(a[i],a[i*2+1]);
                i=i*2+1;
            }
            else break;
        }
    }
}

int main()
{
    f>>n;
    for(i=1; i<=n; i++)
    {
        f>>x;
        insert_heap(a,i,x);
    }
    
    for(i=1;i<=n;i++) remove_heap(a,n-i+1);
    for(long j=1;j<=n;j++) g<<a[j]<<" ";
    f.close();
    g.close();
    return 0;
}