Skip to content

Commit aaff040

Browse files
imkakaMadhavBahl
authored andcommitted
Merge Sort (#231)
* Add @imkaka as a contributor * day4 * Merge Sort
1 parent c03b668 commit aaff040

File tree

2 files changed

+194
-1
lines changed

2 files changed

+194
-1
lines changed

day34/C++/mergeSort.cpp

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
/*
2+
* @author : imkaka
3+
* @date : 5/2/2019
4+
*/
5+
6+
#include<iostream>
7+
#include<vector>
8+
9+
using namespace std;
10+
11+
// Merges two subarrays of arr[].
12+
void merge(vector<int>& arr, int l, int m, int r)
13+
{
14+
int i, j, k;
15+
int n1 = m - l + 1;
16+
int n2 = r - m;
17+
18+
//create temp arrays
19+
int L[n1], R[n2];
20+
21+
//Copy data to temp arrays L[] and R[]
22+
for (i = 0; i < n1; i++)
23+
L[i] = arr[l + i];
24+
for (j = 0; j < n2; j++)
25+
R[j] = arr[m + 1+ j];
26+
27+
// Merge the temp arrays back
28+
i = 0; // Initial index of first subarray
29+
j = 0; // Initial index of second subarray
30+
k = l; // Initial index of merged subarray
31+
while (i < n1 && j < n2)
32+
{
33+
if (L[i] <= R[j])
34+
{
35+
arr[k] = L[i];
36+
i++;
37+
}
38+
else
39+
{
40+
arr[k] = R[j];
41+
j++;
42+
}
43+
k++;
44+
}
45+
46+
// Copy the remaining elements of L[]
47+
while (i < n1)
48+
{
49+
arr[k] = L[i];
50+
i++;
51+
k++;
52+
}
53+
54+
//Copy the remaining elements of R[]
55+
while (j < n2)
56+
{
57+
arr[k] = R[j];
58+
j++;
59+
k++;
60+
}
61+
}
62+
63+
void mergeSort(vector<int>& arr, int l, int r){
64+
65+
if(l < r){
66+
67+
int m = l + (r-l)/2;
68+
69+
mergeSort(arr, l, m);
70+
mergeSort(arr, m+1, r);
71+
72+
merge(arr, l, m, r);
73+
}
74+
}
75+
76+
void print(const vector<int>& arr){
77+
for(const int x : arr){
78+
cout << x << " ";
79+
}
80+
81+
cout << endl;
82+
}
83+
int main(){
84+
vector<int> arr = {12, 34, 1, -5, 10, 43, 23, 100, 100000, 0};
85+
86+
cout << "Before Sorting : ";
87+
print(arr);
88+
89+
mergeSort(arr, 0, arr.size()-1);
90+
91+
cout << endl << "After Sorting : ";
92+
print(arr);
93+
return 0;
94+
}

day34/README.md

Lines changed: 100 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,103 @@ output: [1, 2, 3, 4, 5, 6, 7, 8, 9]
2525

2626
```js
2727
to be added
28-
```
28+
```
29+
30+
### [C++ Implementation](./C++/mergeSort.cpp)
31+
32+
```cpp
33+
/*
34+
* @author : imkaka
35+
* @date : 5/2/2019
36+
*/
37+
38+
#include<iostream>
39+
#include<vector>
40+
41+
using namespace std;
42+
43+
// Merges two subarrays of arr[].
44+
void merge(vector<int>& arr, int l, int m, int r)
45+
{
46+
int i, j, k;
47+
int n1 = m - l + 1;
48+
int n2 = r - m;
49+
50+
//create temp arrays
51+
int L[n1], R[n2];
52+
53+
//Copy data to temp arrays L[] and R[]
54+
for (i = 0; i < n1; i++)
55+
L[i] = arr[l + i];
56+
for (j = 0; j < n2; j++)
57+
R[j] = arr[m + 1+ j];
58+
59+
// Merge the temp arrays back
60+
i = 0; // Initial index of first subarray
61+
j = 0; // Initial index of second subarray
62+
k = l; // Initial index of merged subarray
63+
while (i < n1 && j < n2)
64+
{
65+
if (L[i] <= R[j])
66+
{
67+
arr[k] = L[i];
68+
i++;
69+
}
70+
else
71+
{
72+
arr[k] = R[j];
73+
j++;
74+
}
75+
k++;
76+
}
77+
78+
// Copy the remaining elements of L[]
79+
while (i < n1)
80+
{
81+
arr[k] = L[i];
82+
i++;
83+
k++;
84+
}
85+
86+
//Copy the remaining elements of R[]
87+
while (j < n2)
88+
{
89+
arr[k] = R[j];
90+
j++;
91+
k++;
92+
}
93+
}
94+
95+
void mergeSort(vector<int>& arr, int l, int r){
96+
97+
if(l < r){
98+
99+
int m = l + (r-l)/2;
100+
101+
mergeSort(arr, l, m);
102+
mergeSort(arr, m+1, r);
103+
104+
merge(arr, l, m, r);
105+
}
106+
}
107+
108+
void print(const vector<int>& arr){
109+
for(const int x : arr){
110+
cout << x << " ";
111+
}
112+
113+
cout << endl;
114+
}
115+
int main(){
116+
vector<int> arr = {12, 34, 1, -5, 10, 43, 23, 100, 100000, 0};
117+
118+
cout << "Before Sorting : ";
119+
print(arr);
120+
121+
mergeSort(arr, 0, arr.size()-1);
122+
123+
cout << endl << "After Sorting : ";
124+
print(arr);
125+
return 0;
126+
}
127+
```

0 commit comments

Comments
 (0)