Go 实现快排

188 阅读1分钟

原文链接 blog.ismzl.com/quicksort/

快排思想

  1. 通过一趟排序将要排序的数据分割成独立的两部分
  2. 其中一部分的所有数据都比基准值都要小,另一部分比基准值要大。
  3. 然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
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]