Go 实现单轴快排
package main
import "fmt"
func main(){
arr := []int{9, 6, 11, 3, 5, 12, 8, 7, 10, 15, 14, 4, 1, 13, 2}
quickSort(0,len(arr)-1, arr)
fmt.Println(arr)
}
func quickSort(start, end int, arr []int){
temp := end
left := start
right := end
if left == right {
return
}
for left < right {
// 从右边起,获取到第一个比arr[temp] 小的index
for left < right && arr[right] >= arr[temp]{
right --
}
// 从左边起获取到第一个比arr[temp]大的值
for left < right && arr[left] <= arr[temp]{
left ++
}
// 当left和right相等时,把最右边和left+1的位置交换
if left == right{
arr[left+1] ,arr[temp] = arr[temp], arr[left+1]
break
}
// 交换左右两边的值
arr[left], arr[right] = arr[right], arr[left]
}
// 递归排左边
quickSort(start, left,arr)
// 递归排右边
quickSort(left+1,end,arr)
}