尝试编写算法来实现快速排序。用C++实现,给出详细注释
时间: 2023-07-12 08:46:20 浏览: 93
好的,下面是带详细注释的快速排序的C++实现:
```cpp
#include <iostream>
#include <vector> // 引入vector容器
using namespace std;
/**
* 快速排序函数
*
* @param nums 待排序的数组
* @param left 数组左边界
* @param right 数组右边界
*/
void quicksort(vector<int>& nums, int left, int right) {
// 如果左边界大于等于右边界,说明此时数组为空或只有一个元素,不需要排序,直接返回
if (left >= right) {
return;
}
// 选取中间位置的元素作为基准
int pivot = nums[(left + right) / 2];
// 定义两个指针,i从左往右遍历,j从右往左遍历
int i = left, j = right;
// 开始在数组中进行排序
while (i <= j) {
// i指针往右移动,直到找到一个大于等于基准的元素
while (nums[i] < pivot) {
i++;
}
// j指针往左移动,直到找到一个小于等于基准的元素
while (nums[j] > pivot) {
j--;
}
// 如果此时i指针在j指针左侧,交换i和j指针指向的元素
if (i <= j) {
swap(nums[i], nums[j]);
i++;
j--;
}
}
// 递归对左右两个部分分别进行排序
quicksort(nums, left, j);
quicksort(nums, i, right);
}
int main() {
// 测试用例
vector<int> nums = {3, 5, 1, 4, 2};
// 对数组进行快速排序
quicksort(nums, 0, nums.size() - 1);
// 输出排序后的结果
for (int num : nums) {
cout << num << " ";
}
cout << endl;
return 0;
}
```
快速排序是一种基于分治思想的排序算法。它的基本思想是:选取一个元素作为“基准”(通常选取中间位置的元素),将序列分为两个部分,一部分都比基准小,一部分都比基准大,然后对两个部分分别进行排序。这个过程可以使用递归实现。时间复杂度为 O(nlogn)。
阅读全文