基本思想:首先将待排序记录序列中的所有记录作为当前待排序区域,从中任选一个记录(通常可选取第一个记录),以它的关键字作为枢轴,凡其关键字小于枢轴的记录均移至该记录之前,反之,凡关键字大于枢轴的记录均移动至该记录之后,这样一趟排序之后,记录将无序序列分割成两部分,再在这两部分中分别重复上述操作。
代码:
#include<iostream>
using namespace std;
void quickSort(int num[],int low,int high) {
if (low >= high) return;
int first = low;
int last = high;
int key = num[first];
while (first < last) {
while (first < last && num[last]>=key) { //小元素前移
--last;
}
num[first] = num[last];
while (first < last && num[first] <= key) { //大元素后移
++first;
}
num[last] = num[first];
}
num[last] = key;
quickSort(num, low, first - 1);
quickSort(num, first + 1, high);
}
void main() {
int num[12] = { 10,6,2,33,15,12,23,76,1,54,22,9 };
quickSort(num,0,11);
for (auto x : num) {
cout << x << " ";
}
cout << endl;
system("pause");
}
快速排序的平均时间复杂度为:O(n Log 2 n )
如果待排序记录是一个按关键字有序,那么快速排序退化为气泡排序,时间复杂度为: O(n2)