go语言实现
func partition(nums []int, l int, r int) int {
mid := nums[l] //令枢轴为下标l
for l < r { //l=r时说明到了最后一个位置,不用再排了
for (nums[r] >= mid) && l < r {
r-- //从右开始依次找比枢轴小的元素,比枢轴大则跳过
}
nums[l] = nums[r] //找到了就将比枢轴小的元素移到左边
for (nums[l] <= mid) && l < r {
l++ //由于将比枢轴小的元素移到了左边,该元素原位置空缺,枢轴位置已经被占,再从左依次找比枢轴大的元素
}
nums[r] = nums[l] //找到则交换到右侧
}
nums[l] = mid //下标l即枢轴的位置
return l
}
func qSort(nums []int, l int, r int) {
if l >= r {
return
}
M := partition(nums, l, r)
qSort(nums, l, M-1) //左子区间快排
qSort(nums, M+1, r) //右子区间快排
}