go双指针快速排序

func quickSort(list []int, l, r int) {
	if l >= r {
		return
	}
	if len(list) <= 1 {
		return
	}

	// 左右坐标旧值
	lOld := l
	rOld := r
	pivot := list[l] // 基准值
	voidOffset := l  // 空值下标
	for {
		// 左右下标相等, 设置基准值
		if l == r { // 此时 l == r == voidOffset
			list[voidOffset] = pivot
			fmt.Println(list)
			break
		}

		if voidOffset == l { // 空值下标为左下标
			if list[r] < pivot { // 右下标值小于基准值
				list[voidOffset] = list[r] // 右下标值移入左下标(空值坐标)
				voidOffset = r             // 空值坐标改为右下标
				l++                        // 左下标右移
			} else { // 右下标值大于基值
				r-- // 右下标左移
			}
		} else {                 // 同理 空值下标为右下标
			if list[l] > pivot { // 左下标值大于基准值
				list[voidOffset] = list[l] // 左下标值移入右下标(空值坐标)
				voidOffset = l             // 空值坐标改为左下标
				r--                        // 右下标左移
			} else { // 右下标值大于基值
				l++ // 左下标右移
			}
		}

		fmt.Println(list)
	}

	// 分别对左右两侧进行同样操作
	quickSort(list, lOld, voidOffset-1)
	quickSort(list, voidOffset+1, rOld)
}

打印每次结果可以看出是符合图解的

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值