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)
}
打印每次结果可以看出是符合图解的