Cod sursa(job #1852967)

Utilizator IordachescuAncaFMI Iordachescu Anca Mihaela IordachescuAnca Data 21 ianuarie 2017 12:19:56
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<fstream>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int a[500002],n,i,aux;
void urcare(int a[],int p)
{
    int aux;
    while(2<=p&&a[p/2]>a[p])
    {
        aux=a[p/2];
        a[p/2]=a[p];
        a[p]=aux;
        p=p/2;
    }
}
void coborare(int a[],int n, int p)
{
    int r,aux;
    while(2*p<=n)
    {
        r=2*p;
        if(r+1<=n&&a[r+1]<a[r])
        {
            r=r+1;
        }
    if(a[p]>a[r])
    {
        aux=a[p];
        a[p]=a[r];
        a[r]=aux;
        p=r;
    }
    else
    {
        break;
    }
    }
}
int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>a[i];
    }
    for(i=2;i<=n;i++)
    {
        urcare(a,i);
    }
    for(i=n;2<=i;i--)
    {
        aux=a[1];
        a[1]=a[i];
        a[i]=aux;
        coborare(a,i-1,1);
    }
    for(i=n;1<=i;i--)
    {
        fout<<a[i]<<" ";
    }
    fin.close();
    fout.close();
    return 0;
}