Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //KOPIEC MIN HEAP
- class Heap
- {
- public int[] _elements;
- public int _size;
- public Heap(int n)
- {
- _elements = new int[n];
- _size = 0;
- }
- //indeksy zawsze znajudją się w określonym miejscu w naszej tablicy elementów, dlatego robimy stringi aby je znaleźć
- private int GetLeftChildIndex(int elementIndex) => 2 * elementIndex + 1;
- private int GetRightChild(int elementIndex) => 2 * elementIndex + 2;
- private int GetParentIndex(int elementIndex) => (elementIndex - 1) / 2;
- //przydatne boole
- private bool HasLeftChild(int elementIndex) => 2 * elementIndex + 1 < _size;
- private bool HasRightChild(int elementIndex) => 2 * elementIndex + 2 < _size;
- private bool IsRoot(int elementIndex) => elementIndex == 0;
- //zamiana elementów, chodzi o rodzica i dziecko kiedy wstawiamy nową wartość
- public void Swap(int indexFirst, int indexSecond)
- {
- int tmp = _elements[indexFirst];
- _elements[indexFirst] = _elements[indexSecond];
- _elements[indexSecond] = tmp;
- }
- //dodaj
- public void Add(int n)
- {
- if (_size == _elements.Length)
- throw new IndexOutOfRangeException();
- _elements[_size] = n;
- _size++;
- RecalculateUp();
- }
- //jeśli jest mniejsze niż jego rodzic to będziemy zamieniać dopóki nie znajdzie się w miejscu dla siebie odpowiednim
- public void RecalculateUp() //ta metoda różni się dla max heap
- {
- int index = _size - 1;
- while(!IsRoot(index) && _elements[index] < _elements[GetParentIndex(index)])
- {
- int parentIndex = GetParentIndex(index);
- Swap(parentIndex, index);
- index = parentIndex;
- }
- }
- public void WypiszTablice()
- {
- for (int i = 0; i < _size; i++)
- {
- Console.Write(_elements[i] + " ");
- }
- Console.Write('\n');
- }
- public bool IsHeap()
- {
- for (int i = 1; i < _size; i++)
- {
- if (!(_elements[GetParentIndex(i)] < _elements[i]))
- {
- return false;
- }
- }
- return true;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement