操操操

快速排序golang版本

2023-08-20
1分钟阅读时长

快速排序golang版本

应该怎么理解这个过程,i找到了合适的放置位置,然后此时再把它和现在放在最右侧的元素进行交换,那么,最右侧的元素永远是之前一次趟了元素,之后排好序的元素,那么,假如设想一下,是已经有序了吗?毕竟虽然i的不断右移,需要交换的元素越来越少,从而达到排序的目的。

通常上来说: 数据量比较小时用归并排序速度快,快速排序反而不快; 数据量比较大,同时数据的离散性比较低时,快速排序最快; 数据量比较大,同时数据的离散性比较高时,堆排序最快;

func quickSort(nums []int, l, r int) {
	if l < r {
		m := partition(nums, l, r)
		quickSort(nums, l, m-1)
		quickSort(nums, m+1, r)
	}
}

func partition(nums []int, l, r int) int {
	key := nums[r]
	i := l
	j := l
	for j < r {
		if nums[j] < key {
			nums[i], nums[j] = nums[j], nums[i]
			i++
		}
		j++
		nums[i], nums[r] = nums[r], nums[i]
	}
	return i
}
Avatar

Aisen

Be water,my friend.