vector快速排序
时间: 2023-08-14 14:11:08 浏览: 113
要使用快速排序算法对向量进行排序,可以按照以下步骤进行操作:
1. 选择一个基准元素(通常是向量的第一个元素)作为比较对象。
2. 将向量分成两个子向量,一个包含比基准元素小的元素,另一个包含比基准元素大的元素。这个过程称为分区(partitioning),可以使用双指针法或者递归实现。
3. 对两个子向量分别递归地应用快速排序算法。
4. 将两个排序好的子向量合并起来,得到最终的排序结果。
下面是一个示例的C++代码实现:
```cpp
#include <iostream>
#include <vector>
// 分区函数,返回基准元素的最终位置
int partition(std::vector<int>& arr, int low, int high) {
int pivot = arr[low]; // 选择第一个元素作为基准
int i = low + 1; // 左指针
int j = high; // 右指针
while (i <= j) {
if (arr[i] <= pivot) {
i++;
} else if (arr[j] > pivot) {
j--;
} else {
std::swap(arr[i], arr[j]);
}
}
std::swap(arr[low], arr[j]); // 将基准元素放到正确的位置上
return j;
}
// 快速排序函数
void quickSort(std::vector<int>& arr, int low, int high) {
if (low < high) {
int pivotIndex = partition(arr, low, high); // 获取基准元素的最终位置
quickSort(arr, low, pivotIndex - 1); // 对左子向量进行快速排序
quickSort(arr, pivotIndex + 1, high); // 对右子向量进行快速排序
}
}
// 测试快速排序算法
int main() {
std::vector<int> arr = {5, 2, 9, 1, 6, 3};
quickSort(arr, 0, arr.size() - 1);
for (int num : arr) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
```
这段代码使用了递归实现快速排序算法,将基准元素放到正确的位置上后,再对左右子向量分别进行排序。最终输出排序后的向量:1 2 3 5 6 9。
阅读全文