Cod sursa(job #1813660)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 23 noiembrie 2016 09:46:34
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>

using namespace std;
ifstream fin ("algsort.in");
ofstream fout("algsort.out");
int i,n,v[500010];

void swap(int &a, int &b)
{
    int c;
    c=a;
    a=b;
    b=c;
}

void add(int i)
{
    while(v[i]>v[i/2]&&i/2>0)
    {
        swap(v[i], v[i/2]);
        i/=2;
    }
}

void verificare(int n)
{
    int c, p;
    p=1;c=2;
    while(c<=n)
    {
        if(v[c+1]>v[c]&&c+1<=n)
            c++;
        if(v[p]<v[c])
            swap(v[p], v[c]);
        else
            break;
        p=c;
        c=c*2;
    }
}

int main ()
{
    fin>>n;
    fin>>v[1];
    for(i=2;i<=n;i++)
    {
        fin>>v[i];
        add(i);
    }
    for(i=n;i>=1;i--)
    {
        swap(v[i], v[1]);
        verificare(i-1);
    }
    for(i=1;i<=n;i++)
        fout<<v[i]<<" ";
    fin.close();
    fout.close();
    return 0;
}