快速排序
描述
对于数组nums[p..r]进行快速排序的三步分治步骤
- 分解:数组被分解成两个(可能为空)子数组nums[p..q-1]和nums[q+1…r],使得前一个数组的元素都小于等于nums[q],nums[q]小于等于后一个数组中的每个元素。
- 解决:通过递归调用快速排序,对子数组nums[p..q-1]和nums[q+1…r]进行排序
- 合并:因为子数组都是原址排序的,所以不需要合并操作:数组nums[p..r]已经是有序
|
|
扩展
上面的划分总是选择nums[r]作为主元,并围绕它来划分子数组。下面使用随机抽样选取主元。
|
|
尾递归调用,减少快速排序栈的深度。
|
|