1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| class Solution {
int partition(vector<int>& nums, int left, int right) {
int i = left + rand() % (right - left + 1); int pivot = nums[i];
swap(nums[i], nums[left]);
i = left + 1; int j = right; while (true) { while (i <= j && nums[i] < pivot) { i++; }
while (i <= j && nums[j] > pivot) { j--; }
if (i >= j) { break; }
swap(nums[i], nums[j]); i++; j--; } swap(nums[left], nums[j]); return j; }
void quick_sort(vector<int>& nums, int left, int right) { bool ordered = true; for (int i = left; i < right; i++) { if (nums[i] > nums[i + 1]) { ordered = false; break; } } if (ordered) { return; }
int i = partition(nums, left, right); quick_sort(nums, left, i - 1); quick_sort(nums, i + 1, right); }
public: vector<int> sortArray(vector<int>& nums) { quick_sort(nums, 0, (int) nums.size() - 1); return nums; } };
|
https://leetcode.cn/problems/sort-an-array/description/