//c++快速排序
#include <iostream>
#include <vector>
using namespace std;
int partition(vector<int>& nums, int left, int right) {
int pivot = nums[left]; // 选取第一个元素作为基准值
int i = left, j = right;
while (i < j) {
while (i < j && nums[j] >= pivot) j--; // 从右往左找第一个小于基准值的元素
if (i < j) nums[i++] = nums[j]; // 将小于基准值的元素放到左边
while (i < j && nums[i] < pivot) i++; // 从左往右找第一个大于等于基准值的元素
if (i < j) nums[j--] = nums[i]; // 将大于等于基准值的元素放到右边
}
nums[i] = pivot; // 将基准值放到中间
return i;
}
void quickSort(vector<int>& nums, int left, int right) {
if (left >= right) return; // 如果数组为空或只有一个元素,直接返回
int mid = partition(nums, left, right); // 分治
quickSort(nums, left, mid - 1); // 对左边的元素进行快速排序
quickSort(nums, mid + 1, right); // 对右边的元素进行快速排序
}
int main() {
vector<int> nums = { 3, 5, 1, 2, 100,92, 7, 66, 8, 4,99 };
quickSort(nums, 0, nums.size() - 1);
for (int num : nums) {
cout << num << " ";
}
cout << endl;
system("pause");
return 0;
}
在上述代码中,partition
函数用于将数组划分为左右两部分,并返回基准值的索引,quickSort
函数用于递归地对左右两部分进行快速排序。最后在main
函数中对给定的数组进行快速排序,并输出结果。