c++ 快速排序怎么写 c++快速排序算法代码

快速排序通过基准分治实现高效排序。1. 选择末尾元素为基准,使用双指针划分数组;2. partition函数确定基准正确位置;3. quickSort递归处理左右子区间;4. 平均时间复杂度O(n log n),最坏O(n²);5. C++代码利用vector和swap,简洁清晰,适合学习应用。

快速排序是一种高效的递归排序算法,通过选择一个“基准”元素将数组分为两部分,左侧小于基准,右侧大于基准,再对两部分分别排序。C++ 中实现快排代码简洁且效率高。

基本思路

选取一个基准值(通常选首元素或尾元素),使用双指针从两端向中间扫描,调整元素位置使小的在左、大的在右,递归处理左右两段。

C++ 快速排序代码实

#include 
#include

using namespace std;

// 分区函数:将数组按基准分成两部分
int partition(vector& arr, int low, int high) {
int pivot = arr[high]; // 以最后一个元素为基准
int i = low - 1; // 小于基准的区域的边界

for (int j = low; j < high; j++) {
if (arr[j] <= pivot) {
i++;
swap(arr[i], arr[j]);
}
}
swap(arr[i + 1], arr[high]); // 基准放到正确位置
return i + 1;
}

// 快速排序主函数
void quickSort(vector& arr, int low, int high) {
if (low < high) {
int pi = partition(arr, low, high); // 获取基准索引
quickSort(arr, low, pi - 1); // 排序基准左边
quickSort(arr, pi + 1, high); // 排序基准右边
}
}

// 打印数组
void printArray(const vector& arr) {
for (int num : arr)
cout << num << " ";
cout << endl;
}

// 示例用法
int main() {
vector arr = {10, 7, 8, 9, 1, 5};
int n = arr.size();

cout << "排序前: ";
printArray(arr);

quickSort(arr, 0, n - 1);

cout << "排序后: ";
printArray(arr);

return 0;
}

关键点说明

基准选择影响性能,最坏情况是每次选到最大或最小值,导致时间复杂度退化为 O(n²),平均为 O(n log n)。实际中可随机选基准或三数取中来优化。

该实现使用 STL 的 vectorswap,代码清晰易懂,适合学习和基础应用。基本上就这些。不复杂但容易忽略边界条件。