本帖最后由 thepoy 于 2020-6-17 18:02 编辑
我知道什么是快速排序,也知道快速排序怎么实现只是看不懂下面这段实现快速排序的代码。
这是我看见过的用Go实现快速排序最简洁的代码,但也正是因此,我才看不懂,道行太浅了。
for循环体内的代码,主要是else里的代码,看不太明白是什么意思
代码如下:
func QuickSort(s []int) {
if len(s) < 2 {
return
}
base, baseIndex := s[0], 1
left, right := 0, len(s)-1
for left < right {
if s[baseIndex] > base { // 如果基础索引对应的值 s[baseIndex] 大于基数 base,那么就将这 s[baseIndex] 与右边界值互换,并将右边界索引减1向左移动1位
s[baseIndex], s[right] = s[right], s[baseIndex]
right--
} else { // 如果基础索引对应的值 s[baseIndex] 小于或基数 base,那么就将这 s[baseIndex] 与左边界值互换,并将左边界索引加1向右移动1位
s[baseIndex], s[left] = s[left], s[baseIndex]
left++
baseIndex++ // 不明白的是这行基础索引 ++ 的原因和意义是什么,是因为左边界右移了,所以baseIndex也必须右移,还是有其他原因呢?
}
}
s[left] = base
QuickSort(s[:left])
QuickSort(s[left+1:])
}
|