Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- class Heap
- {
- int v[100];
- int n;//numarul de noduri
- void pushUp(int position);
- void pushDown(int position);
- public:
- Heap()
- {
- n = 0;
- }
- Heap(int *v2, int n2);//construieste un heap pe baza vectorului v2
- void insert (int value);//insereaza un element cu valoarea value si ii face pushUP
- void removeHead();//sterge radacina
- int getFirst()//returneaza radacina
- {
- if (n != 0)
- return v[1];
- }
- int *sort();//sorteaza vectorul aka HeapSort
- void print();
- };
- void swap(int &first, int &second)
- {
- int aux = first;
- first = second;
- second = aux;
- }
- Heap::Heap(int *v2, int n2)
- {
- for (int i = 1; i <= n2; i++)
- v[i] = v2[i];
- for(int i = n/2; i >= 1; i++) //de la primul nod care nu e frunza, apelez pushDown
- pushDown(i);
- }
- void Heap::pushUp(int position)
- {
- while (position != 1 && v[position] > v[position / 2])
- swap(v[position], v[position / 2]);
- position = position / 2;
- }
- void Heap::pushDown(int position)
- {
- int maximPosition = position;//pozitia fiului cel mai mare
- if ( 2 * position <= n && v[position] < v[2 * position])//compar cu fiul stang
- maximPosition = 2 * position;
- if (2 * position + 1 <= n && v[2 * position + 1 ] > v[maximPosition])//compar cu fiul drept
- maximPosition = 2 * position + 1;
- if (position != maximPosition)
- {
- swap(v[position], v[maximPosition]);
- pushDown(maximPosition);
- }
- }
- void Heap::insert(int value)
- {
- n++;
- v[n] = value;
- pushUp(n);
- }
- void Heap::removeHead()
- {
- swap(v[1], v[n]);//interschimb radacina cu ultima frunza
- n--;//scad dimensiunea vectorului(arborelui)
- pushDown(1);
- }
- int *Heap::sort()
- {
- int nAux = n;
- for (int i = 1; i <= nAux; i++)
- {
- removeHead();
- }
- n = nAux;
- return v;
- }
- void Heap::print()
- {
- for (int i = 1; i <= n; i++)
- std::cout<<v[i]<<' ';
- std::cout<<'\n';
- }
- int main()
- {
- Heap heap1;
- heap1.insert(90);
- heap1.insert(50);
- heap1.insert(70);
- heap1.insert(40);
- heap1.insert(35);
- heap1.insert(30);
- heap1.insert(60);
- heap1.insert(12);
- heap1.print();
- heap1.sort();
- heap1.print();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement