原文链接 blog.ismzl.com/quicksort/
快排思想
- 通过一趟排序将要排序的数据分割成独立的两部分
- 其中一部分的所有数据都比基准值都要小,另一部分比基准值要大。
- 然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
func quickSort(nums []int, left int, right int) {
key := nums[left] //取出第一项作为基准
l, r := left, right
for l < r {
for r > l && nums[r] >= key {
r--
}
nums[l] = nums[r]
for l < r && nums[l] <= key {
l++
}
nums[r] = nums[l]
}
//在上述变化中,最终只有初始的nums[l]的值被覆盖,也就是key,最后的nums[l]为无效值,故赋值为key
nums[l] = key
if l!=left {
quickSort(nums, left, l-1)
}
if right!=l {
quickSort(nums, l+1, right)
}
}
以下为测试数据
func main() {
nums := []int{5,1,3,5,10,7,4,9,2,8}
quickSort(nums1, 0, len(nums1)-1)
fmt.Print(nums1)
}
输出
[0 1 1 2 3 4 5 5 7 8 9 10]