leetcode 912. 排序数组

912. 排序数组

难度中等

给你一个整数数组 nums,请你将该数组升序排列。

 

示例 1:

输入:nums = [5,2,3,1]
输出:[1,2,3,5]

示例 2:

输入:nums = [5,1,1,2,0,0]
输出:[0,0,1,1,2,5]

 

提示:

  1. 1 <= nums.length <= 50000
  2. -50000 <= nums[i] <= 50000

方法: 随机主元的快排

class Solution {
public:
    void quicksort(vector<int>& nums, int l, int r){
        if(l>=r) return;
        int t = rand() % (r - l + 1) + l; // 随机选一个作为我们的主元
        swap(nums[l], nums[t]);

        int pivot = nums[l], i = l, j = r;
        while(i<j){
            while(i<j && nums[j] >= pivot){j--;}
            while(i<j && nums[i] <= pivot){i++;}
            swap(nums[i], nums[j]);
        }
        swap(nums[l], nums[i]);
        quicksort(nums, l, i-1);
        quicksort(nums, i+1, r);
        return;
    }
    vector<int> sortArray(vector<int>& nums) {
        int n = nums.size();
        quicksort(nums, 0, n-1);
        return nums;
    }
};

 

posted @ 2021-06-22 22:32  深圳地铁Princess  阅读(24)  评论(0编辑  收藏  举报