2022-04-29 快排

class Solution {
public:
    vector<int> sortArray(vector<int>& nums) {
        QuickSort(nums, 0, nums.size() - 1);
        return nums;
    }
    void QuickSort(vector<int>& nums, int begin, int end) {
        if (begin > end) {  // begin = end时返回本身
            return;
        }
        int temp = nums[begin];
        int i = begin;
        int j = end;
        while (i != j ) {
            while (nums[j] >= temp && j > i) {   //卡住的数字肯定小于temp
                j--;
            }
            while (nums[i] <= temp && i < j) {
                i++;
            }
            if (j > i) {                  // 如果两边都找到就换,找不到就等着
                int t = nums[i];
                nums[i] = nums[j];
                nums[j] = t;
            }
        }

        nums[begin] = nums[i];    //直接交换卡住的数字
        nums[i] = temp;
        QuickSort(nums, begin, i - 1);
        QuickSort(nums, i + 1, end);
    }
};

    void random_QuickSort(vector<int>& nums, int begin, int end) {
        if (begin >= end) {
            return;
        }
        // 选取随机数放到第一位
        int rand_index = rand() % (end - begin);
        int temp = nums[begin + rand_index];
        nums[begin + rand_index] = nums[begin];
        nums[begin] = temp;
        
        // 正常快排逻辑
        int i = begin;
        int j = end;
        
        while (i != j) {
            while (nums[j] >= temp && j > i) {
                j--;
            }
            while (nums[i] <= temp && i < j) {
                i++;
            }
            if (j > i) {
                int t = nums[i];
                nums[i] = nums[j];
                nums[j] = t;
            }
        }
        nums[begin] = nums[i];
        nums[i] = temp;
        random_QuickSort(nums, begin, i - 1);
        random_QuickSort(nums, i + 1, end);
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 帮某些人在单位加班,素质不行的人真的是硬伤,从最基本的逻辑、思路、排版讲起,加班到12点,还被骂的狗血喷头...
    潘多拉简书阅读 1,228评论 1 0
  • 想哭,被骗,都不敢告诉家里人,呜呜呜
    南星怀夕阅读 819评论 0 0
  • 编剧重塑阅读 708评论 0 1
  • 三年级语文第二次阶段性总结 孟村小学 杨幸敏 这次阶段性作业设计重视学生综合...
    aa18fbac9b11阅读 3,106评论 0 2
  • 昨天听了市教研员对中考的解读,虽然占位很高,理论很足,但还是有收获的。 作文教学要坚定地教下去,总有一天会有区分度...
    胡喜平阅读 754评论 0 2