Untitled
unknown
plain_text
a year ago
1.2 kB
10
Indexable
class Solution {
public:
void mergeSort(int l, int r, vector<int> &nums) {
if (l + 1 == r) {
if (nums[l] > nums[r]) {
swap(nums[l], nums[r]);
}
return;
}
else if (l == r) {
return;
}
int mid = (l + r) / 2;
mergeSort(l, mid, nums);
mergeSort(mid + 1, r, nums);
int left = l;
int right = mid + 1;
vector<int> sortedArr;
while (left <= mid && right <= r) {
if (nums[left] < nums[right]) {
sortedArr.emplace_back(nums[left++]);
}
else sortedArr.emplace_back(nums[right++]);
}
if (left == mid + 1 && right <= r) {
for (int i=right; i<=r; ++i)
sortedArr.emplace_back(nums[i]);
}
else if (right == r + 1 && left <= mid) {
for (int i=left; i<=mid; ++i)
sortedArr.emplace_back(nums[i]);
}
for (int i=0; i<sortedArr.size(); ++i) {
nums[l+i] = sortedArr[i];
}
}
vector<int> sortArray(vector<int>& nums) {
mergeSort(0, nums.size()-1, nums);
return nums;
}
};Editor is loading...
Leave a Comment