Untitled

 avatar
unknown
plain_text
a year ago
1.2 kB
7
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