Advertisement
Guest User

Untitled

a guest
Sep 19th, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.81 KB | None | 0 0
  1. #pragma once
  2. #include <iostream>
  3. #include <vector>
  4. using namespace std;
  5. class Heap
  6. {
  7. private:
  8. vector<int> arr;
  9. public:
  10. void createHeap(vector<int> heap)//노드생성
  11. {
  12. arr.push_back(0);
  13. for (int i = 0; i < heap.size(); i++)
  14. insert(heap[i]);
  15. }
  16. void display()
  17. {
  18. if (isEmpty()) cout << "empty";
  19. for (int i = 1; i < arr.size(); i++) cout << arr[i] << " ";
  20. cout << endl;
  21. }
  22. void insert(int data){
  23. arr.push_back(data);
  24. bubbleUp(arr.size()-1);
  25. }
  26. void bubbleUp(int pos)
  27. {
  28. //왼쪽자식 인덱스 : [부모인덱스*2]
  29. //오른쪽자식 인덱스 : [(부모인덱스*2)+1]
  30. //부모 인덱스 : (자식인덱스/2)
  31. int parent = pos / 2;
  32. int child = pos;
  33. while (child > 0 && arr[child] < arr[parent])
  34. {
  35. swap(arr[child],arr[parent]);
  36. child = parent;
  37. parent /= 2;
  38. }
  39. }
  40. int extractMin()
  41. {
  42. int min = arr[1], max = arr.back();
  43. arr.pop_back();
  44. if (min == max) return min;
  45. arr[1] = max;
  46. sinkDown(1);
  47. return min;
  48. }
  49. void sinkDown(int pos)
  50. {
  51. //왼쪽자식 인덱스 : [부모인덱스*2]
  52. //오른쪽자식 인덱스 : [(부모인덱스*2)+1]
  53. //부모 인덱스 : (자식인덱스/2)
  54. int current = pos;
  55. int leftIdx = pos * 2, rightIdx = (pos * 2) + 1;
  56. if (leftIdx < arr.size() && rightIdx < arr.size())
  57. {
  58. if (arr[leftIdx] < arr[rightIdx]) current = leftIdx;
  59. else current = rightIdx;
  60. }
  61. //자식이 하나만 있을때
  62. if (leftIdx < arr.size())
  63. if (arr[leftIdx] < arr[current]) swap(arr[leftIdx], arr[current]);
  64. if (rightIdx < arr.size())
  65. if (arr[rightIdx] < arr[current]) swap(arr[rightIdx], arr[current]);
  66.  
  67. if (current != pos){
  68. swap(arr[current], arr[pos]);
  69. pos = current;
  70. sinkDown(pos);
  71. }
  72. }
  73. void swap(int& a, int& b){ int t = a; a = b; b = t; }
  74. bool isEmpty(){ return (arr.size()-1 == 0) ? true : false; }
  75. int heapSize(){ return arr.size() - 1; }
  76. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement