Cod sursa(job #1295521)

Utilizator ovidiuz98Zamfir Ovidiu ovidiuz98 Data 19 decembrie 2014 18:30:51
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>

using namespace std;

ifstream fin("algsort.in");
ofstream fout("algsort.out");
int v[500005],n,i,j;

void inserare(int n) {
    int c=n,p=c/2;
    while(p>=1 && v[p]<v[c]){
        swap(v[c],v[p]);
        c=p;
        p/=2;
    }
}


void corecteaza(int n) {
    int p = 1;
    int c = 2*p;

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

int main(){
    fin>>n;
    for(i=1;i<=n;i++){
        fin>>v[i];
        inserare(i);//am heap cu i-1 elemente si inseresz un nou element cu valoarea v[i]
    }
    for(i=n;i>=2;i--) {
        swap(v[1], v[i]);
        corecteaza(i-1);  // corecteaza heapul cu i-1 elemente stricat doar de radacina
    }
    for (i=1;i<=n;i++)
        fout<<v[i]<<" ";
}