Cod sursa(job #1383523)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 10 martie 2015 12:45:23
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#define DIM 500010
using namespace std;

ifstream fin ("algsort.in" );
ofstream fout("algsort.out");

int n, m, i, j, k, ok, minim;
int v[DIM], aux, c, p;

void swap(int a, int b){
    aux = v[a];
    v[a] = v[b];
    v[b] = aux;
    return;
}

void shift(){
    c = i;
    p = c / 2;
    while(p != 0){
        if(v[p] < v[c]){
            swap(p, c);
            c = p;
            p /= 2;
        }
        else
            break;
    }
    return;
}

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

void Build_Heap(){
    fin >> n;
    for(i = 1; i <= n; i ++){
        fin >> v[i];
        shift();
    }
    return;
}

void Heap_Sort(){
    for(i = n; i >= 2; i --){
        swap(1, i);
        percolate();
    }
    for(i = 1; i <= n; i ++)
        fout << v[i] << " ";
    return;
}

int main(){
    Build_Heap();
    Heap_Sort();
    return 0;
}