Cod sursa(job #2739266)

Utilizator andre.anghelacheAndreea Anghelache andre.anghelache Data 7 aprilie 2021 14:16:09
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.03 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

void heap_max(vector<int> &v, int nod, int n);



void HeapSort_crescator(vector <int> &v, int n)
{   int i;
    for(i=n/2-1; i>=0; i--)
        heap_max(v, i, n);
    for(i=n-1; i>0; i--)
    {
        int aux=v[0];
        v[0]=v[i];
        v[i]=aux;

        heap_max(v,  0, i);
    }

}

void heap_max(vector<int> &v, int nod, int n) {
    int maxim=nod, fiuStanga=2*nod+1, fiuDreapta=2*nod+2, aux;

    if(fiuStanga<n && v[fiuStanga]>v[maxim]) ///inca suntem in vector
///fiul din stanga al lui maxim e mai mare ca maxim
            maxim=fiuStanga;

    if(fiuDreapta<n && v[fiuDreapta]>v[maxim])
            maxim=fiuDreapta;

    if (maxim != nod) ///daca am intrat in cel putin un if de mai devreme si radacina nu e cea mai mare
    {
        aux=v[nod];
        v[nod]=v[maxim];
        v[maxim]=aux;

        heap_max(v, maxim, n);
    }
}
//
//void heap_min(vector<int> &v, int nod, int n);
//
//void HeapSort_descrescator(vector <int> &v, int n)
//{   int i;
//    for(i=n/2-1; i>=0; i--)
//        heap_min(v, i, n);
//    for(i=n-1; i>0; i--)
//    {
//        int aux=v[0];
//        v[0]=v[i];
//        v[i]=aux;
//
//        heap_min(v,  0, i);
//    }
//
//}
//
//void heap_min(vector<int> &v, int nod, int n) {
//    int minim=nod, fiuStanga=2*nod+1, fiuDreapta=2*nod+2, aux;
//
//    if(fiuStanga<n && v[fiuStanga]<v[minim])
//        minim=fiuStanga;
//
//    if(fiuDreapta<n && v[fiuDreapta]<v[minim])
//        minim=fiuDreapta;
//
//    if (minim != nod)
//    {
//        aux=v[nod];
//        v[nod]=v[minim];
//        v[minim]=aux;
//
//        heap_min(v, minim, n);
//    }
//}



int main() {
    ifstream in("algsort.in");
    ofstream out("algsort.out");
    int n, x;

    in>>n;
    vector <int> v;

    for (int i=0; i<n; i++)
    {
        in>>x;
        v.push_back(x);
    }

//    for(int i=0; i<n; i++)
//        cout<<v[i]<<" ";
//
//    cout<<endl;

    HeapSort_crescator(v, n);

    for(int i=0; i<n; i++)
        out<<v[i]<<" ";

    return 0;
}