快速排序采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。
空间复杂度
快速排序是一种原地排序,只需要一个很小的栈作为辅助空间,空间复杂度为O(log2n),所以适合在数据集比较大的时候使用。
时间复杂度
时间复杂度比较复杂,最好的情况是O(n),最差的情况是O(n2),所以平时说的O(nlogn),为其平均时间复杂度。
- O(n):理想的情况,每次划分所选择的中间数恰好将当前序列几乎等分,经过log2n趟划分,便可得到长度为1的子表。这样,整个算法的时间复杂度为O(nlog2n)。
- O(n2):最坏的情况,每次所选的中间数是当前序列中的最大或最小元素,这使得每次划分所得的子表中一个为空表,另一子表的长度为原表的长度-1。这样,长度为n的数据表的快速排序需要经过n趟划分,使得整个排序算法的时间复杂度为O(n2)。
快速排序的基本思想
1、先从数列中取出一个数(一般取第一位数字)作为中心点(Pivot);
2、分区过程,将大于Pivot的数字放到Pivot的左边,将小于Pivot的数字放到Pivot的右边;
3、再对左右区间重复第二步,直到各区间只有一个数
现在对“9,78,0,23,-567,70”序列进行快速排序。
快速