package main
import (
"fmt"
"math"
)
/*
一、刚进来 arr = []int{1, 9, 10, 30, 2, 5, 45, 8, 63, 234, 12}
反正就是不断的递归判断知道子元素为一个时输出进行拼接
*/
func QuickSort(arr []int, str string) []int {
if len(arr) <= 1 { //直到判断数组剩下一个元素时直接返回结果,给到myarr拼接
fmt.Println("arr++++*****", arr)
return arr
}
key := int(math.Ceil(float64(len(arr) / 2)))
splitdata := arr[key] //第一个数据
low := make([]int, 0, 0) //比我小的数据
hight := make([]int, 0, 0) //比我大的数据
mid := make([]int, 0, 0) //与我一样大的数据
mid = append(mid, splitdata) //加入一个
for i := 0; i < len(arr); i++ {
if arr[i] < splitdata {
low = append(low, arr[i])
// fmt.Println("小于", low, arr[i], arr[0], i)
} else if arr[i] > splitdata {
hight = append(hight, arr[i])
// fmt.Println("大于", hight, arr[i], arr[0], i)
}
}
fmt.Println("low++++", low)
fmt.Println("mid++++", mid)
fmt.Println("hight++++", hight)
low, hight = QuickSort(low, "小于"), QuickSort(hight, "大于") //不断的递归
fmt.Println("low++++", low)
fmt.Println("mid++++", mid)
fmt.Println("hight++++", hight)
myarr := append(append(low, mid...), hight...)
fmt.Println("myarr++++---------------------", myarr)
return myarr
}
//快读排序算法
func main() {
arr := []int{10, 9, 12, 5, 2, 4, 1}
fmt.Println(QuickSort(arr, "结果"))
}
快速排序demo
于 2022-03-29 09:41:46 首次发布