快速排序的排序思想为分治法,其时间复杂度平均为为O(N*logN),高于冒泡排序等,在数据量较大且无序时,快速排序的效率较高,常常被使用。快速排序是在原数据结构上进行操作,但由于其递归使用栈空间,平均空间复杂度为 O(logn)。
当数据有序时,快速排序复杂度会上升,最坏的情况下需要进行n‐1递归调用,其空间复杂度为O(n),但可通过取随机数作为基数的办法进行优化,这在后面作讨论。
快速排序的基本思想是:
1.取基数:首先从数列中取出一个数作为基数,记得保存该数。
2.交换/分区:将比基数大的数全放到它的右边,小于或等于它的数全放到它的左边;这样便得到左右分区,右分区中的数 >= 左分区的数,但每个分区中的数仍是无序的。
3.递归:再对左右区间重复进行第二步的操作,直到当各个区间只有一个数时,排序结束。
代码如下:
可以成功执行
#include <iostream>
#include <vector>
using namespace std;
/*
函数名:quick_sort
参数:
arry: 待排序容器的指针
left: 待排序的区间的左下