Pagini recente » Cod sursa (job #1724430) | Cod sursa (job #1108241) | Cod sursa (job #1242252) | Cod sursa (job #2677925) | Cod sursa (job #1708008)
#include<iostream>
#include<fstream>
#include<vector>
using namespace::std;
ofstream fout("algsort.out");
int N;
template<class T>
class Coada
{
private:
vector<T> co;
void shiftDown(int x, int y);
void shiftUp(int x, int y);
void creare_heap();
public:
Coada();
Coada(vector<T> &);
int isEmpty();
void push(T );
void afis();
void Heapsort();
};
template<class T>Coada<T>::Coada()
{
}
template<class T>Coada<T>::Coada(vector <T> &v)
{
if (v.size() > 0)
{
co = v;
creare_heap();
}
}
template < class T > void Coada<T>::push(T val)
{
co.push_back(val);
shiftUp(0, co.size() - 1);
}
template<class T> void Coada<T>::shiftUp(int prim, int ultim)
{
int parent;
int child = ultim;
while (child > prim)
{
parent = (child - 1) / 2;
if (co[child] > co[parent])
{
T aux;
aux = co[child];
co[child] = co[parent];
co[parent] = aux;
child = parent;
}
else
break;
}
}
template<class T> void Coada<T>::shiftDown(int prim, int ultim)
{
int root = prim;
while ((root * 2 / 1) + 1 <= ultim)
{
int left = (root * 2) + 1;
int right = left + 1;
int aux = root;
if (co[aux] < co[left])
aux = left;
if ((right <= ultim) && (co[aux] < co[right]))
aux = right;
if (aux != root)
{
T aux1 = co[root];
co[root] = co[aux];
co[aux] = aux1;
}
else
break;
}
}
template<class T> void Coada<T>::creare_heap()
{
int i;
int sizee = co.size();
for (i = (sizee - 1) / 2; i >= 0; --i)
shiftDown(i, sizee - 1);
}
template<class T> void Coada<T>::Heapsort()
{
int i;
T temp;
for (i = co.size() - 1; i >= 1; i--)
{
temp = co[0];
co[0] = co[i];
co[i] = temp;
shiftDown(0, i - 1);
}
}
template<class T>void Coada<T>::afis()
{
int i;
int size1 = co.size();
if (size1 < 1)
{
cout << "coada este vida" << endl;
return;
}
for (i = 0; i < size1; i++)
fout << co[i]<<" ";
}
int main(){
ifstream fin("algsort.in");
int x;
Coada<int> C;
fin>> N;
while (fin >> x)
C.push(x);
C.Heapsort();
C.afis();
}