快排中的注意点
2020-06-07 本文已影响0人
鲜橙
首先把快排的原理搞懂https://blog.csdn.net/qq_28584889/article/details/88136498。
但是在自己写的时候发现有几个地方容易掉坑,即代码中的注释处,对于其原因的解释应该再看一遍快排原理。
题目来自 leetcode - [912. Sort an Array]
class Solution {
public:
vector<int> sortArray(vector<int>& nums) {
quiksort(nums, 0, nums.size()-1);
return nums;
}
void quiksort(vector<int>& nums, int left, int right) {
if (left >= right)
return;
if (left < 0 || right > nums.size())
return;
int base = nums[left];
int i = left; // 这里从left开始!!!
int j = right;
while(i < j){
// 1. j(right)要先移动
// 2. 注意base比较时的等于号
while(base <= nums[j] && i < j){
j--;
}
while(base >= nums[i] && i < j){
i++;
}
std::swap(nums[i], nums[j]);
}
std::swap(nums[left], nums[i]);
quiksort(nums, left, i-1);
quiksort(nums, i+1, right);
}
};