数据结构:数组
快速排序是数字排序常用的排序算法,个人理解核心思想是通过选定数组中的一个中间值,比较当前选中的中间值和其他值的大小
将小于中间值的数放在一个数组中,比中间值大的放在另外一个数组中,然后递归该方法,得到两边的排序,最后拼接起来。
时间复杂度:O(nlgn)
具体代码实现如下:
package main
import "fmt"
/**
* @Author KyrieWang
* @Description //TODO quicksort 时间复杂度为 O(nlgn)
* @Date 9:48 上午 2021/3/29
* @Param
* @return
*/
func QuickSort(arr []int) []int {
if len(arr) <= 1 {
return arr
}
startArr := arr[0]
lowData := make([]int, 0)
highData := make([]int, 0)
sameData := make([]int, 0)
for i := 0; i < len(arr); i++ {
if arr[i] < startArr {
lowData = append(lowData, arr[i])
} else if arr[i] > startArr {
highData = append(highData, arr[i])
} else {
sameData = append(sameData, arr[i])
}
}
lowData, highData = QuickSort(lowData), QuickSort(highData) //递归进行排序
return append(append(lowData, sameData...), highData...) // append ...追加多个参数
}
func main() {
data := []int{1, 5, 2, 4, 12, 21, 8, 12, 31, 24, 12, 14, 23}
listData := QuickSort(data)
fmt.Println(listData)
}