func quickSort(arr []int) []int { if len(arr) <= 1 { return arr } //首次拆分 left, selectValue, right := split(arr) list := [][]int{left, selectValue, right} for i := 0; i < len(list); i++ { v := list[i] if len(v) <= 1 { continue } A, B, C := split(v) temp := make([][]int, len(list[i+1:])) copy(temp, list[i+1:]) //替换长度大于1的 list = append(append(list[:i], A, B, C), temp...) i-- } var result []int for _, v := range list { if len(v) > 0 { result = append(result, v[0]) } } return result }
func split(arr []int) ([]int, []int, []int) { selectIndex := len(arr) / 2 var left, right []int for i, v := range arr { if selectIndex == i { continue } if v <= arr[selectIndex] { left = append(left, v) continue } right = append(right, v) } return left, []int{arr[selectIndex]}, right }