code
package main
import (
"fmt"
)
func swap(i, j int, a []int) {
a[i], a[j] = a[j], a[i]
}
func partition(a []int, left, right int) int {
pivotKey := a[left]
pivotPointer := left
for left < right {
for left < right && a[right] > pivotKey { //先从右边开始 当小于a[left] 就停止
right--
}
for left < right && a[left] <= pivotKey { //右边停止后 ,左边开始, 当大于a[left] 就停止
left++
}
fmt.Println(a)
swap(left, right, a) //把大的交换到右边,把小的交换到左边
}
swap(left, pivotPointer, a) //最后把piovt到中间
return left
}
func QuictSort(a []int, left, right int) {
if left >= right { //跳出递归
return
}
pivotPos := partition(a, left, right)
//递归
QuictSort(a, left, pivotPos-1) //左边再次递归
QuictSort(a, pivotPos+1, right) //右边再次递归
}
func main() {
a := []int{56, 32, 7, 69, 34, 521, 52}
QuictSort(a, 0, len(a)-1)
fmt.Println(a)
}
结果
➜ quickSort time go run quickSort.go
[56 32 7 69 34 521 52]
[56 32 7 52 34 521 69]
[34 32 7 52 56 521 69]
[7 32 34 52 56 521 69]
[7 32 34 52 56 521 69]
[7 32 34 52 56 69 521]
go run quickSort.go 0.18s user 0.36s system 81% cpu 0.658 total