美文网首页
快排中的注意点

快排中的注意点

作者: 鲜橙 | 来源:发表于2020-06-07 17:55 被阅读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);
        }
    };
    

    相关文章

      网友评论

          本文标题:快排中的注意点

          本文链接:https://www.haomeiwen.com/subject/mmoctktx.html