Cod sursa(job #2758996)

Utilizator NeacsuMihaiNeacsu Mihai NeacsuMihai Data 14 iunie 2021 20:00:53
Problema Sortare prin comparare Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <fstream>

#define NMAX 200000 //doua sute de mii

using namespace std;

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

int v[NMAX + 1];
int H[NMAX + 1];
int dimHeap;

void sift(int k){
    int son;

    do{
        son = 0;

        if(k * 2 <= dimHeap){
            son = k * 2;

            if(k * 2 + 1 <= dimHeap && H[k * 2 + 1] < H[k * 2]){
                son = k * 2 + 1;
            }
        }

        if(son != 0){
            if(H[son] < H[k]){
                swap(H[son], H[k]);
                k = son;
            }
            else {
                son = 0;
            }
        }

    }while(son != 0);
}

void stergereMinim(){
    swap(H[1], H[dimHeap]);
    dimHeap--;

    sift(1);
}

/*
void afisareHeap(){
    for(int i = 1; i <= dimHeap; i++){
        cout << H[i] << ' ';
    }
    cout << "\n";
}
*/

int main()
{
    int N;
    fin >> N;
    dimHeap = N;

    for(int i = 1; i <= N; i++){
        fin >> v[i];

        H[i] = v[i];
    }

    for(int i = N / 2; i >= 1; i--){
        sift(i);
    }

    for(int i = 1; i <= N; i++){
        fout << H[1] << ' ';

        stergereMinim();

    }

    return 0;
}