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

快速排序是一种高效的递归排序算法,通过选择一个“基准”元素将数组分为两部分,左侧小于基准,右侧大于基准,再对两部分分别排序。C++ 中实现快排代码简洁且效率高。
选取一个基准值(通常选首元素或尾元素),使用双指针从两端向中间扫描,调整元素位置使小的在左、大的在右,递归处理左右两段。
<strong>#include <iostream><br>#include <vector><br><br>using namespace std;<br><br>// 分区函数:将数组按基准分成两部分<br>int partition(vector<int>& arr, int low, int high) {<br> int pivot = arr[high]; // 以最后一个元素为基准<br> int i = low - 1; // 小于基准的区域的边界<br><br> for (int j = low; j < high; j++) {<br> if (arr[j] <= pivot) {<br> i++;<br> swap(arr[i], arr[j]);<br> }<br> }<br> swap(arr[i + 1], arr[high]); // 基准放到正确位置<br> return i + 1;<br>}<br><br>// 快速排序主函数<br>void quickSort(vector<int>& arr, int low, int high) {<br> if (low < high) {<br> int pi = partition(arr, low, high); // 获取基准索引<br> quickSort(arr, low, pi - 1); // 排序基准左边<br> quickSort(arr, pi + 1, high); // 排序基准右边<br> }<br>}<br><br>// 打印数组<br>void printArray(const vector<int>& arr) {<br> for (int num : arr)<br> cout << num << " ";<br> cout << endl;<br>}<br><br>// 示例用法<br>int main() {<br> vector<int> arr = {10, 7, 8, 9, 1, 5};<br> int n = arr.size();<br><br> cout << "排序前: ";<br> printArray(arr);<br><br> quickSort(arr, 0, n - 1);<br><br> cout << "排序后: ";<br> printArray(arr);<br><br> return 0;<br>}</strong>基准选择影响性能,最坏情况是每次选到最大或最小值,导致时间复杂度退化为 O(n²),平均为 O(n log n)。实际中可随机选基准或三数取中来优化。
doxygen是一款好用的程序员辅助工具,它可以让程序添加批添代码更加简单轻松,兼容C++、 C、Java、 Objective-C、Python等主流编程语言,小编提供的doxygen中文手册包含了基本介绍、语法技巧以及进阶技巧等内容,可以让你快速上手操作,有需要的欢迎下载。 基本介绍 Doxygen已经支持生成ANSI编码的chm目录文件(index.hhc)!Doxygen通常是用作生成英文文档的,生成中文文档需要修改输入和输出的码制,这样可以改变解析方式,生成中文文档。但是,你必须意识 到,Dox
0
该实现使用 STL 的 vector 和 swap,代码清晰易懂,适合学习和基础应用。基本上就这些。不复杂但容易忽略边界条件。
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号