用c++编程, 用STL的容器vector和partition实现快速排序功能并逐句解释代码
时间: 2024-03-26 18:35:22 浏览: 79
好的,下面是用C++编程,用STL的容器vector和partition实现快速排序功能的代码,并逐句解释:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void quick_sort(vector<int>& nums, int left, int right);
int partition(vector<int>& nums, int left, int right);
int main() {
vector<int> nums = {5, 1, 3, 8, 4, 2, 9, 6, 7};
quick_sort(nums, 0, nums.size() - 1);
for (int num : nums) {
cout << num << " ";
}
cout << endl;
return 0;
}
void quick_sort(vector<int>& nums, int left, int right) {
if (left < right) {
int pivot = partition(nums, left, right);
quick_sort(nums, left, pivot - 1);
quick_sort(nums, pivot + 1, right);
}
}
int partition(vector<int>& nums, int left, int right) {
int pivot = nums[right];
int i = left;
for (int j = left; j < right; ++j) {
if (nums[j] < pivot) {
swap(nums[i], nums[j]);
++i;
}
}
swap(nums[i], nums[right]);
return i;
}
```
- `#include <iostream>` 用于输入输出流。
- `#include <vector>` 用于使用vector容器。
- `#include <algorithm>` 用于使用swap函数。
- `using namespace std;` 使用命名空间std。
- `void quick_sort(vector<int>& nums, int left, int right);` 声明快速排序函数。
- `int partition(vector<int>& nums, int left, int right);` 声明划分函数。
- `int main() { ... }` 主函数。
- `vector<int> nums = {5, 1, 3, 8, 4, 2, 9, 6, 7};` 定义一个名为nums的vector容器,并初始化为{5, 1, 3, 8, 4, 2, 9, 6, 7}。
- `quick_sort(nums, 0, nums.size() - 1);` 调用快速排序函数,对nums进行排序。
- `for (int num : nums) { ... }` 遍历nums中的元素,并输出。
- `void quick_sort(vector<int>& nums, int left, int right) { ... }` 快速排序函数的定义。
- `if (left < right) { ... }` 判断左右边界,若左边界小于右边界,则继续划分。
- `int pivot = partition(nums, left, right);` 调用划分函数,返回中间元素下标。
- `quick_sort(nums, left, pivot - 1);` 递归排序左边的子序列。
- `quick_sort(nums, pivot + 1, right);` 递归排序右边的子序列。
- `int partition(vector<int>& nums, int left, int right) { ... }` 划分函数的定义。
- `int pivot = nums[right];` 取最右边的元素作为中间元素。
- `int i = left;` 初始化i为左边界。
- `for (int j = left; j < right; ++j) { ... }` 遍历左右边界之间的元素。
- `if (nums[j] < pivot) { ... }` 如果当前元素小于中间元素,则交换当前元素和i所在位置的元素,并且i自增。
- `swap(nums[i], nums[right]);` 将中间元素放到正确位置。
- `return i;` 返回中间元素的下标。
以上就是用C++编程,用STL的容器vector和partition实现快速排序功能的代码,并逐句解释。
阅读全文