快排基于一个数划分边界,归并将中间点作为分界。
class Solution {
public:
vector<int> tmp;
void merge_sort(vector<int>& nums, int l, int r)
{
if (l >= r) return;
int mid = (l + r) >> 1;
merge_sort(nums, l, mid), merge_sort(nums, mid + 1, r);
int k = 0, i = l, j = mid + 1;
while (i <= mid && j <= r)
{
if (nums[i] <= nums[j]) tmp[k ++ ] = nums[i ++ ];
else tmp[k ++ ] = nums[j ++ ];
}
while (i <= mid) tmp[k ++ ] = nums[i ++ ];
while (j <= r) tmp[k ++ ] = nums[j ++ ];
for (i = l, j = 0; i <= r; i ++, j++ ) nums[i] = tmp[j];
}
vector<int> sortArray(vector<int>& nums) {
tmp.resize((int)nums.size(), 0);
merge_sort(nums, 0, nums.size() - 1);
return nums;
}
};