Pagini recente » Cod sursa (job #2883475) | Cod sursa (job #2739266)
#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;
}