Skip to content

Commit 9d688f2

Browse files
committed
Add MergeSort
1 parent 28398b4 commit 9d688f2

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

MergeSort.cpp

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
class MergeSort {
6+
private:
7+
vector<int> nums;
8+
vector<int> aux;
9+
10+
void merge(int left, int mid, int right) {
11+
for (int i = left; i <= right; i++)
12+
aux[i] = nums[i];
13+
14+
int i = left, j = mid + 1, k = left;
15+
16+
while (i <= mid && j <= right) {
17+
if (aux[i] <= aux[j])
18+
nums[k++] = aux[i++];
19+
else
20+
nums[k++] = aux[j++];
21+
}
22+
23+
while (i <= mid)
24+
nums[k++] = aux[i++];
25+
26+
while (j <= right)
27+
nums[k++] = aux[j++];
28+
}
29+
30+
public:
31+
MergeSort(const vector<int> &nums) : nums(nums) { aux.resize(nums.size()); }
32+
33+
void mergeSort(int left, int right) {
34+
if (left >= right)
35+
return;
36+
37+
int mid = left + ((right - left) >> 1);
38+
39+
mergeSort(left, mid);
40+
mergeSort(mid + 1, right);
41+
42+
merge(left, mid, right);
43+
}
44+
};

0 commit comments

Comments
 (0)