Go-快速排序
package main import ( "fmt" "math/rand" ) //3,9,2,8,1,7,4,6,5,10 //3 9,2,8,1,7,4,6,5,10 // 2,1 3, 9,2,8,,7,4,6,5,10 // 9,2,8,,7,4,6,5,10 // ,8,7,4,6,5 9 10 //4 5 6 func QuickSort(arr []int) []int { length := len(arr) //数组长度 if length <= 1 { return arr //一个元素的数组,直接返回 } else { splitdata := arr[0] //以第一个为基准 low := make([]int, 0, 0) //存储比我小的 high := make([]int, 0, 0) //存储比我大的 mid := make([]int, 0, 0) //存储与我相等 mid = append(mid, splitdata) //加入第一个相等 for i := 1; i < length; i++ { if arr[i] < splitdata { low = append(low, arr[i]) } else if arr[i] > splitdata { high = append(high, arr[i]) } else { mid = append(mid, arr[i]) } } low, high = QuickSort(low), QuickSort(high) //切割递归处理 myarr := append(append(low, mid...), high...) return myarr } } func QuickSort2(arr []int) []int { length := len(arr) //数组长度 if length <= 1 { return arr //一个元素的数组,直接返回 } else { //n:=length-1//n>=0 && n<=length-1 n := rand.Int() % length splitdata := arr[n] //以第一个为基准 low := make([]int, 0, 0) //存储比我小的 high := make([]int, 0, 0) //存储比我大的 mid := make([]int, 0, 0) //存储与我相等 mid = append(mid, splitdata) //加入第一个相等 for i := 0; i < length; i++ { if i == n { continue } if arr[i] < splitdata { low = append(low, arr[i]) } else if arr[i] > splitdata { high = append(high, arr[i]) } else { mid = append(mid, arr[i]) } } low, high = QuickSort(low), QuickSort(high) //切割递归处理 myarr := append(append(low, mid...), high...) return myarr } } func main() { arr := []int{3, 9, 2, 8, 1, 7, 4, 6, 5, 10} //fmt.Println(SelectSortMax(arr)) fmt.Println(QuickSort2(arr)) }