1. 基本思想
总是以第一个元素为基准,目标是找到基准的位置,使得右边都大于基准,左边都小于基准,然后再递归左右的子表,从而找到所有元素的位置,完成排序。
2. 代码案例实现
#include<iostream>
using namespace std;
//寻找用第一个元素的位置,右边大于它,左边小于它
int partition(int a[], int low, int high) {
int pivot = a[low]; //第一个元素作为基准(枢轴)
while (low < high) {
while (low < high && a[high] >= pivot) {
high--;
}
a[low] = a[high]; //大于基准pivot的放在low的位置
while (low < high && a[low] <= pivot) {
low++;
}
a[high] = a[low]; //小于基准pivot的放在high的位置
}
a[low] = pivot; //此时low=high
return low;
}
//快速排序
void quickSort(int a[], int low, int high) {
if (low < high) { //验证合法性
int pivotpos = partition(a, low, high); //求出该放置的位置
quickSort(a, low, pivotpos - 1); //递归由pivotpos隔开的左子表
quickSort(a, pivotpos + 1, high); //递归由pivotpos隔开的右子表
}
}
int main() {
int a[10] = { 5,4,6,2,10,1,3,8,7,9 };
quickSort(a, 0, 9);
for (int i = 0; i < 10; i++)
{
cout << a[i] << " ";
}
cout << endl;
return 0;
}
3. 运行结果

4. 时间复杂度
最好情况:O(nlogn)
最坏情况:O(n^2)
平均:O(nlogn)
5. 空间复杂度
由于要使用递归函数栈
O(logn)
6. 稳定性
不稳定

本文详细介绍了快速排序算法的基本思想,通过C++代码示例展示了如何用第一个元素作为基准进行划分,包括partition函数的实现和整个quickSort过程。讨论了其时间复杂度(最好、最坏和平均)、空间复杂度以及稳定性特点。
58万+

被折叠的 条评论
为什么被折叠?



