c++vector快排
时间: 2023-09-05 19:14:28 浏览: 228
C++的STL库中的vector已经自带了快速排序(quicksort)的实现,只需要调用vector类的sort函数即可。sort函数的用法如下:
```c++
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {3, 1, 4, 1, 5, 9, 2, 6};
std::sort(vec.begin(), vec.end()); // 默认升序排序
for (int i : vec) {
std::cout << i << " ";
}
return 0;
}
```
如果需要按降序排序,则需要自定义一个比较函数作为sort函数的第三个参数,如下:
```c++
#include <vector>
#include <algorithm>
bool cmp(int a, int b) {
return a > b; // 降序排序
}
int main() {
std::vector<int> vec = {3, 1, 4, 1, 5, 9, 2, 6};
std::sort(vec.begin(), vec.end(), cmp); // 自定义比较函数
for (int i : vec) {
std::cout << i << " ";
}
return 0;
}
```
相关问题
C++ vector快排
好的,关于C++ vector的快排,可以使用STL中的sort函数来实现。sort函数的使用方法如下:
```c++
#include <vector>
#include <algorithm>
bool cmp(int a, int b) {
return a < b;
}
int main() {
std::vector<int> vec = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
std::sort(vec.begin(), vec.end(), cmp);
for (auto i : vec) {
std::cout << i << " ";
}
return 0;
}
```
其中,cmp函数是自定义的比较函数,用于指定排序规则。在这个例子中,我们按照从小到大的顺序排序。
写一个C++快排代码
好的,以下是一个简单的 C++ 快排实现:
```c++
#include <iostream>
#include <vector>
using namespace std;
void quickSort(vector<int>& nums, int left, int right) {
if (left >= right) {
return;
}
int pivot = nums[left];
int i = left, j = right;
while (i < j) {
while (i < j && nums[j] >= pivot) {
j--;
}
nums[i] = nums[j];
while (i < j && nums[i] <= pivot) {
i++;
}
nums[j] = nums[i];
}
nums[i] = pivot;
quickSort(nums, left, i - 1);
quickSort(nums, i + 1, right);
}
int main() {
vector<int> nums = {3, 2, 5, 1, 4};
quickSort(nums, 0, nums.size() - 1);
for (int num : nums) {
cout << num << " ";
}
cout << endl;
return 0;
}
```
在这个代码中,我们使用了递归的方式来实现快排。我们首先选取一个基准值 pivot,然后将数组分为两部分,左边的部分小于等于 pivot,右边的部分大于等于 pivot。然后分别对左右两部分进行递归排序,最终得到一个有序的数组。
需要注意的是,在实际应用中,快排可能会遇到最坏情况,即每次选取的基准值都是最大或最小值,这样会导致递归深度过大,甚至栈溢出。为了避免这种情况,可以采用随机化的方式来选取基准值,或者使用其他更高效的排序算法。
阅读全文