Skip to content

Commit c23ab99

Browse files
authored
O(nlong)
1 parent 1107cd4 commit c23ab99

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

Diff for: src/Algorithms/Divide & Conquer/03 Merge sort.cpp

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
class Solution {
2+
public:
3+
void merge(vector<int>& nums, int l, int m, int r)
4+
{
5+
int n1 = m - l + 1;
6+
int n2 = r - m;
7+
int A[n1], B[n2];
8+
9+
for(int i = 0; i < n1; i++)
10+
A[i] = nums[l + i];
11+
12+
for(int i = 0; i < n2; i++)
13+
B[i] = nums[m + 1 + i];
14+
15+
int i = 0, j = 0;
16+
int k = l;
17+
18+
while(i < n1 && j < n2)
19+
{
20+
if(A[i] <= B[j])
21+
nums[k++] = A[i++];
22+
else
23+
nums[k++] = B[j++];
24+
}
25+
26+
while(i < n1)
27+
nums[k++] = A[i++];
28+
while(j < n2)
29+
nums[k++] = B[j++];
30+
}
31+
32+
void mergeSort(vector<int>& nums, int l, int r)
33+
{
34+
if(l >= r) //remember to put the equal to sign
35+
return;
36+
37+
int m = l + (r - l)/2;
38+
mergeSort(nums, l, m);
39+
mergeSort(nums, m + 1, r);
40+
merge(nums, l, m, r);
41+
}
42+
43+
vector<int> sortArray(vector<int>& nums)
44+
{
45+
mergeSort(nums, 0, nums.size() - 1);
46+
return nums;
47+
}
48+
49+
50+
};

0 commit comments

Comments
 (0)