Cod sursa(job #1189187)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 21 mai 2014 19:05:28
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>
#define DIM 500010
using namespace std;


int v[DIM], n, i;

void schimba(int &a, int &b) {
    int aux = a;
    a = b;
    b = aux;
}

void insereaza(int v[DIM], int n, int x) {
    v[++n] = x;
    int c = n;
    int p = n/2;
    while (p!=0) {
        if (v[c] > v[p]) {
            schimba(v[c], v[p]);
            c = p;
            p = p/2;
        } else
            break;
    }
}

void corecteaza(int v[DIM], 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]) {
            schimba(v[p], v[c]);
            p = c;
            c = 2 * p;
        } else
            break;
    }
}

int main() {
    ifstream fin("algsort.in");
    ofstream fout("algsort.out");
    fin>>n;
    for (i=1;i<=n;i++) {
        fin>>v[i];
        insereaza(v, i-1, v[i]);
    }

    for (i=n;i>=2; i--) {
        schimba(v[1], v[i]);
        corecteaza(v, i-1);
    }

    for (i=1;i<=n;i++)
        fout<<v[i]<<" ";

    return 0;
}