Skip to content

Commit 96329ee

Browse files
committed
Time: 108 ms (74.36%), Space: 71.4 MB (60.44%) - LeetHub
1 parent 9b824e6 commit 96329ee

File tree

1 file changed

+26
-18
lines changed

1 file changed

+26
-18
lines changed
+26-18
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,37 @@
11
class Solution {
22
public:
33
vector<int> sortArray(vector<int>& nums) {
4-
return srt(nums, 0, (int)nums.size() - 1);
4+
vector<int> temp(nums.size());
5+
srt(nums, temp, 0, nums.size() - 1);
6+
return nums;
57
}
68

7-
vector<int> srt(vector<int>& v, int s, int e) {
8-
if (s == e) return {v[s]};
9-
int mid = (s + e) / 2;
10-
vector<int> left = srt(v, s, mid);
11-
vector<int> right = srt(v, mid + 1, e);
12-
vector<int> temp;
13-
int i = 0, j = 0;
14-
while (i < (int)left.size() && j < (int)right.size()) {
15-
if (left[i] <= right[j]) {
16-
temp.push_back(left[i++]);
9+
private:
10+
void srt(vector<int>& v, vector<int>& temp, int s, int e) {
11+
if (s >= e) return;
12+
int mid = s + (e - s) / 2;
13+
srt(v, temp, s, mid);
14+
srt(v, temp, mid + 1, e);
15+
merge(v, temp, s, mid, e);
16+
}
17+
18+
void merge(vector<int>& v, vector<int>& temp, int s, int mid, int e) {
19+
int i = s, j = mid + 1, k = s;
20+
while (i <= mid && j <= e) {
21+
if (v[i] <= v[j]) {
22+
temp[k++] = v[i++];
1723
} else {
18-
temp.push_back(right[j++]);
24+
temp[k++] = v[j++];
1925
}
2026
}
21-
while (i < (int)left.size()) {
22-
temp.push_back(left[i++]);
27+
while (i <= mid) {
28+
temp[k++] = v[i++];
29+
}
30+
while (j <= e) {
31+
temp[k++] = v[j++];
2332
}
24-
while (j < (int)right.size()) {
25-
temp.push_back(right[j++]);
33+
for (int l = s; l <= e; ++l) {
34+
v[l] = temp[l];
2635
}
27-
return temp;
2836
}
29-
};
37+
};

0 commit comments

Comments
 (0)