Advertisement
Guest User

min heap

a guest
Jan 22nd, 2020
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.44 KB | None | 0 0
  1. //KOPIEC MIN HEAP
  2. class Heap
  3. {
  4. public int[] _elements;
  5. public int _size;
  6.  
  7. public Heap(int n)
  8. {
  9. _elements = new int[n];
  10. _size = 0;
  11. }
  12.  
  13.  
  14. //indeksy zawsze znajudją się w określonym miejscu w naszej tablicy elementów, dlatego robimy stringi aby je znaleźć
  15. private int GetLeftChildIndex(int elementIndex) => 2 * elementIndex + 1;
  16. private int GetRightChild(int elementIndex) => 2 * elementIndex + 2;
  17. private int GetParentIndex(int elementIndex) => (elementIndex - 1) / 2;
  18.  
  19. //przydatne boole
  20. private bool HasLeftChild(int elementIndex) => 2 * elementIndex + 1 < _size;
  21. private bool HasRightChild(int elementIndex) => 2 * elementIndex + 2 < _size;
  22. private bool IsRoot(int elementIndex) => elementIndex == 0;
  23.  
  24. //zamiana elementów, chodzi o rodzica i dziecko kiedy wstawiamy nową wartość
  25. public void Swap(int indexFirst, int indexSecond)
  26. {
  27. int tmp = _elements[indexFirst];
  28. _elements[indexFirst] = _elements[indexSecond];
  29. _elements[indexSecond] = tmp;
  30. }
  31.  
  32. //dodaj
  33. public void Add(int n)
  34. {
  35. if (_size == _elements.Length)
  36. throw new IndexOutOfRangeException();
  37.  
  38. _elements[_size] = n;
  39. _size++;
  40.  
  41. RecalculateUp();
  42. }
  43.  
  44. //jeśli jest mniejsze niż jego rodzic to będziemy zamieniać dopóki nie znajdzie się w miejscu dla siebie odpowiednim
  45. public void RecalculateUp() //ta metoda różni się dla max heap
  46. {
  47. int index = _size - 1;
  48. while(!IsRoot(index) && _elements[index] < _elements[GetParentIndex(index)])
  49. {
  50. int parentIndex = GetParentIndex(index);
  51. Swap(parentIndex, index);
  52. index = parentIndex;
  53. }
  54. }
  55.  
  56. public void WypiszTablice()
  57. {
  58. for (int i = 0; i < _size; i++)
  59. {
  60. Console.Write(_elements[i] + " ");
  61. }
  62. Console.Write('\n');
  63. }
  64.  
  65. public bool IsHeap()
  66. {
  67. for (int i = 1; i < _size; i++)
  68. {
  69. if (!(_elements[GetParentIndex(i)] < _elements[i]))
  70. {
  71. return false;
  72. }
  73. }
  74. return true;
  75. }
  76.  
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement