Cod sursa(job #1852969)

Utilizator alexburdescuBurdescu Alexandru alexburdescu Data 21 ianuarie 2017 12:22:06
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int h[500009],nh;
void urcare(int h[],int p);
void coboare(int h[],int nh, int p);
int main()
{
    fin>>nh;
    for(int i=1; i<=nh; i++)
    {
        fin>>h[i];
        urcare(h,i);
    }
    for(int i=nh; i>=2; i--)
    {
        swap(h[i],h[1]);
        coboare(h,i-1,1);
    }
    for(int i=1; i<=nh; i++)
    {
        fout<<h[i]<<" ";
    }
    fin.close();
    fout.close();
    return 0;
}
void urcare(int h[],int p)
{
    while(p>=2 && h[p/2]<h[p])
    {
        swap(h[p],h[p/2]);
        p=p/2;
    }
}
void coboare(int h[],int nh, int p)
{
    while(2*p<=nh)
    {
        int r=2*p;
        if(r+1<=nh && h[r+1]>h[r])
        {
            r=r+1;
        }
        if(h[p]<h[r])
        {
            swap(h[p],h[r]);
            p=r;
        }
        else
        {
            break;
        }
    }
}