快速排序
时间: 2023-06-22 14:23:29 浏览: 43
快速排序是一种常用的排序算法,其基本思想是通过划分将待排序的数据分成两个部分,一部分小于基准值,一部分大于基准值,然后再将两部分递归地进行快排,最终完成排序。以下是一份使用 C++ 实现的快速排序代码,供您参考:
```c++
#include <iostream>
#include <vector>
using namespace std;
int partition(vector<int>& nums, int left, int right) {
int pivot = nums[left];
int i = left + 1, j = right;
while (i <= j) {
if (nums[i] <= pivot) {
i++;
} else if (nums[j] > pivot) {
j--;
} else {
swap(nums[i], nums[j]);
}
}
swap(nums[left], nums[j]);
return j;
}
void quick_sort(vector<int>& nums, int left, int right) {
if (left >= right) return;
int pivot_index = partition(nums, left, right);
quick_sort(nums, left, pivot_index - 1);
quick_sort(nums, pivot_index + 1, right);
}
int main() {
vector<int> nums = {3, 5, 4, 2, 7, 6, 1};
quick_sort(nums, 0, nums.size() - 1);
for (int num : nums) {
cout << num << " ";
}
cout << endl;
return 0;
}
```
在这段代码中,我们使用了递归的方式实现快速排序。具体来说,我们首先定义了一个 partition 函数,用于将数组划分成左右两个部分。算法的核心是使得左半部分的元素都小于等于 pivot,右半部分的元素都大于 pivot。我们从左右两端开始遍历数组,当左端小于等于 pivot 时继续向右遍历,当右端大于 pivot 时继续向左遍历,如果左端大于 pivot,右端小于等于 pivot,则交换两个元素的位置。最终,交换 pivot 和右端元素的位置,返回右端的下标作为 pivot 的位置。
然后,我们定义了一个 quick_sort 函数,用于递归地进行快速排序。具体来说,我们首先将数组划分为左右两个部分,然后递归地对左右两个部分进行快速排序。
最后,我们在 main 函数中测试了一下这个算法。你可以自己构造一些测试数据,看看这个算法的表现。
希望这份代码对您有所帮助!