voidquick_sort(int nums[], int l, int r){ if (l >= r) return; // 选取中间值做分隔点 // i 取 l - 1、j 取 r + 1 是因为要做do-while int i = l - 1, j = r + 1, x = nums[l + r >> 1]; while (i < j) { do ++i; while (nums[i] < x); // while (nums[++i] < x); do --j; while (nums[j] > x); // while (nums[--j] > x); if (i < j) swap(nums[i], nums[j]); } quick_sort(nums, l, j), quick_sort(nums, j + 1, r); }
快排模板2(经典思想)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
voidquick_sort(vector<int> &nums, int l, int r){ if (l + 1 >= r) return; // 选取数组第一个元素做分隔点 int first = l, last = r - 1, key = nums[first]; // 交换步骤1 while (first < last) { while(first < last && nums[last] >= key) --last; nums[first] = nums[last]; // 交换步骤2 while (first < last && nums[first] <= key) ++first; nums[last] = nums[first]; // 交换步骤3 } nums[first] = key; // 交换步骤4 quick_sort(nums, l, first); quick_sort(nums, first + 1, r); }