Skip to content

Commit bfc7b59

Browse files
authored
Add files via upload
1 parent 7d790c2 commit bfc7b59

File tree

2 files changed

+132
-0
lines changed

2 files changed

+132
-0
lines changed

Heap/01 InsertinHeap.cpp

+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#include <iostream>
2+
#include <vector>
3+
4+
using namespace std;
5+
6+
// Lecture based
7+
void InsertA(int A[], int n){
8+
int i = n;
9+
int temp = A[n];
10+
while (i > 0 && temp > A[i % 2 == 0 ? (i/2)-1 : i/2]){
11+
A[i] = A[i % 2 == 0 ? (i/2)-1 : i/2];
12+
i = i % 2 == 0 ? (i/2)-1 : i/2;
13+
}
14+
A[i] = temp;
15+
}
16+
17+
18+
// STL vector based
19+
void Insert(vector<int>& vec, int key){
20+
// Insert key at the end
21+
auto i = vec.size();
22+
vec.emplace_back(key);
23+
24+
// Rearrange elements: Indices are not DRY :-(
25+
while (i > 0 && key > vec[i % 2 == 0 ? (i/2)-1 : i/2]){
26+
vec[i] = vec[i % 2 == 0 ? (i/2)-1 : i/2];
27+
i = i % 2 == 0 ? (i/2)-1 : i/2;
28+
}
29+
vec[i] = key;
30+
}
31+
32+
template <class T>
33+
void Print(T& vec, int n){
34+
cout << "Max Heap: [" << flush;
35+
for (int i=0; i<n; i++){
36+
cout << vec[i] << flush;
37+
if (i < n-1){
38+
cout << ", " << flush;
39+
}
40+
}
41+
cout << "]" << endl;
42+
}
43+
44+
45+
int main() {
46+
47+
int a[] = {45, 35, 15, 30, 10, 12, 6, 5, 20, 50};
48+
InsertA(a, 9);
49+
Print(a, sizeof(a)/sizeof(a[0]));
50+
cout << endl;
51+
52+
// STL based
53+
vector<int> v = {45, 35, 15, 30, 10, 12, 6, 5, 20};
54+
Print(v, v.size());
55+
v.reserve(15); // Reserve space for 15 elements
56+
57+
Insert(v, 50);
58+
Print(v, v.size());
59+
60+
return 0;
61+
}

Heap/02 CreateHeapUsingSTLVector.cpp

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
#include <iostream>
2+
#include <vector>
3+
4+
using namespace std;
5+
6+
void Insert(vector<int>& vec, int key){
7+
// Insert key at the end
8+
auto i = vec.size();
9+
vec.emplace_back(key);
10+
11+
// Rearrange elements: O(log n)
12+
while (i > 0 && key > vec[i % 2 == 0 ? (i/2)-1 : i/2]){
13+
vec[i] = vec[i % 2 == 0 ? (i/2)-1 : i/2];
14+
i = i % 2 == 0 ? (i/2)-1 : i/2;
15+
}
16+
vec[i] = key;
17+
}
18+
19+
void InsertInplace(int A[], int n){
20+
int i = n;
21+
int temp = A[n];
22+
while (i > 0 && temp > A[i % 2 == 0 ? (i/2)-1 : i/2]){
23+
A[i] = A[i % 2 == 0 ? (i/2)-1 : i/2];
24+
i = i % 2 == 0 ? (i/2)-1 : i/2;
25+
}
26+
A[i] = temp;
27+
}
28+
29+
void CreateHeap(vector<int>& vec, int A[], int n){
30+
// O(n log n)
31+
for (int i=0; i<n; i++){
32+
Insert(vec, A[i]);
33+
}
34+
}
35+
36+
void createHeap(int A[], int n){
37+
for (int i=0; i<n; i++){
38+
InsertInplace(A, i);
39+
}
40+
}
41+
42+
template <class T>
43+
void Print(T& vec, int n, char c){
44+
cout << c << ": [" << flush;
45+
for (int i=0; i<n; i++){
46+
cout << vec[i] << flush;
47+
if (i < n-1){
48+
cout << ", " << flush;
49+
}
50+
}
51+
cout << "]" << endl;
52+
}
53+
54+
55+
int main() {
56+
57+
cout << "Create Heap" << endl;
58+
int b[] = {10, 20, 30, 25, 5, 40, 35};
59+
Print(b, sizeof(b)/sizeof(b[0]), 'b');
60+
61+
vector<int> v;
62+
CreateHeap(v, b, sizeof(b)/sizeof(b[0]));
63+
Print(v, v.size(), 'v');
64+
65+
cout << "Inplace Insert" << endl;
66+
createHeap(b, sizeof(b)/sizeof(b[0]));
67+
Print(b, sizeof(b)/sizeof(b[0]), 'b');
68+
69+
70+
return 0;
71+
}

0 commit comments

Comments
 (0)