Skip to content

Commit 0452a8c

Browse files
authored
Create main.cpp
1 parent 29e4638 commit 0452a8c

File tree

1 file changed

+189
-0
lines changed
  • 19 - Heap Data Structure Problems/01 - Example

1 file changed

+189
-0
lines changed
Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
#include <iostream>
2+
#include <algorithm> // For STL heap functions
3+
#include <vector>
4+
using namespace std;
5+
6+
class Heap {
7+
public:
8+
int arr[100];
9+
int size;
10+
11+
Heap() {
12+
arr[0] = -1; // Initialize array with -1 at index 0 (1-based indexing)
13+
size = 0; // Initial size of heap is 0
14+
}
15+
16+
// Insert a new element into the heap
17+
void insert(int value) {
18+
size++;
19+
int index = size;
20+
arr[index] = value;
21+
22+
// Heapify up to maintain max heap property
23+
while (index > 1) {
24+
int parent = index / 2;
25+
if (arr[parent] < arr[index]) {
26+
swap(arr[parent], arr[index]);
27+
index = parent; // Move up to parent
28+
} else {
29+
return;
30+
}
31+
}
32+
}
33+
34+
// Delete the root element from the heap
35+
void deleteFromHeap() {
36+
if (size == 0) {
37+
cout << "Nothing to delete" << endl;
38+
return;
39+
}
40+
41+
// Replace root with the last element
42+
arr[1] = arr[size];
43+
size--;
44+
45+
// Heapify down to maintain max heap property
46+
int i = 1;
47+
while (i <= size) {
48+
int leftIndex = 2 * i;
49+
int rightIndex = 2 * i + 1;
50+
int largest = i;
51+
52+
if (leftIndex <= size && arr[largest] < arr[leftIndex]) {
53+
largest = leftIndex;
54+
}
55+
if (rightIndex <= size && arr[largest] < arr[rightIndex]) {
56+
largest = rightIndex;
57+
}
58+
if (largest != i) {
59+
swap(arr[i], arr[largest]);
60+
i = largest;
61+
} else {
62+
return;
63+
}
64+
}
65+
}
66+
67+
// Print the heap
68+
void print() {
69+
for (int i = 1; i <= size; i++) {
70+
cout << arr[i] << " ";
71+
}
72+
cout << endl;
73+
}
74+
};
75+
76+
// Heapify for max heap
77+
void max_heapify(int arr[], int n, int i) {
78+
int largest = i;
79+
int left = 2 * i;
80+
int right = 2 * i + 1;
81+
82+
if (left <= n && arr[largest] < arr[left]) largest = left;
83+
if (right <= n && arr[largest] < arr[right]) largest = right;
84+
85+
if (largest != i) {
86+
swap(arr[largest], arr[i]);
87+
max_heapify(arr, n, largest);
88+
}
89+
}
90+
91+
// Heapify for min heap
92+
void min_heapify(int arr[], int n, int i) {
93+
int smallest = i;
94+
int left = 2 * i + 1;
95+
int right = 2 * i + 2;
96+
97+
if (left < n && arr[smallest] > arr[left]) smallest = left;
98+
if (right < n && arr[smallest] > arr[right]) smallest = right;
99+
100+
if (smallest != i) {
101+
swap(arr[smallest], arr[i]);
102+
min_heapify(arr, n, smallest);
103+
}
104+
}
105+
106+
// Sort a max heap (ascending order)
107+
void maxHeapSort(int arr[], int n) {
108+
// Build a max heap
109+
for (int i = n / 2; i > 0; i--) {
110+
max_heapify(arr, n, i);
111+
}
112+
113+
// Sort
114+
for (int i = n; i > 1; i--) {
115+
swap(arr[1], arr[i]);
116+
max_heapify(arr, i - 1, 1);
117+
}
118+
}
119+
120+
// Sort a min heap (descending order)
121+
void minHeapSort(int arr[], int n) {
122+
for (int i = n / 2 - 1; i >= 0; i--) {
123+
min_heapify(arr, n, i);
124+
}
125+
126+
for (int i = n - 1; i > 0; i--) {
127+
swap(arr[0], arr[i]);
128+
min_heapify(arr, i, 0);
129+
}
130+
}
131+
132+
int main() {
133+
Heap h;
134+
h.insert(50);
135+
h.insert(55);
136+
h.insert(53);
137+
h.insert(52);
138+
h.insert(54);
139+
140+
cout << "Max Heap after insertions:" << endl;
141+
h.print();
142+
h.deleteFromHeap();
143+
cout << "Max Heap after deletion:" << endl;
144+
h.print();
145+
146+
cout << endl;
147+
148+
// Max Heap Creation using array
149+
int max_arr[6] = {-1, 54, 53, 55, 52, 50};
150+
int n = 5;
151+
for (int i = n / 2; i > 0; i--) {
152+
max_heapify(max_arr, n, i);
153+
}
154+
155+
cout << "Heapify array - Max Heap" << endl;
156+
for (int i = 1; i <= n; i++) {
157+
cout << max_arr[i] << " ";
158+
}
159+
cout << endl;
160+
161+
maxHeapSort(max_arr, n);
162+
cout << "Printing max sorted heap (Ascending Order)" << endl;
163+
for (int i = 1; i <= n; i++) {
164+
cout << max_arr[i] << " ";
165+
}
166+
cout << endl << endl;
167+
168+
// Min Heap Creation using array
169+
int min_arr[5] = {54, 53, 55, 52, 50};
170+
int m = 5;
171+
for (int i = m / 2 - 1; i >= 0; i--) {
172+
min_heapify(min_arr, m, i);
173+
}
174+
175+
cout << "Heapify array - Min Heap" << endl;
176+
for (int i = 0; i < m; i++) {
177+
cout << min_arr[i] << " ";
178+
}
179+
cout << endl;
180+
181+
minHeapSort(min_arr, m);
182+
cout << "Printing min sorted heap (Descending Order)" << endl;
183+
for (int i = 0; i < m; i++) {
184+
cout << min_arr[i] << " ";
185+
}
186+
cout << endl;
187+
188+
return 0;
189+
}

0 commit comments

Comments
 (0)