快速排序
分而治之(divide and conquer,D&C)-一种著名的递归式问题解决方法
快速排序的思路就是这样的一种思路。
对5,4,7,9,10,1,2,8,6使用快速排序
快速排序需要选择一个中间值。然后将大于中间值放一边,小于中间值放另外一边。
知道在排序的最长的一侧子序列为2个为止。
例如选择第一个元素5为中间值,则排列后的为4,1,2,|5|,7,9,10,8,6(快速排序具有保序性,原有排列顺序不变)
继续选子序列的第一个元素为子序列中间值,则排列后为1,2,|4|,5,6,|7|,9,10,8
重复刚才的过程…
最后得到1,2,4,5,6,7,9,10,8。
该算法符合递归的条件,可以使用递归来完成。
基线条件为最大的子序列为2个数
递归条件为,选取中间值,大的放右边,小的放左边
平均运行时间为 O O O($ n l o g n nlog n nlogn).
补充:
1.D&C将问题逐步分解,使用D&C处理列表时,基线条件很可能是空数组或只包含一个元素的数组
2.实现快速排序时,请随机选择用作基准值的元素。快速排序的平均运行时间为 O O O( n l o g n nlogn nlogn)