Go语言快速排序
Posted 携壶酌流霞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言快速排序相关的知识,希望对你有一定的参考价值。
1、快速排序法的原理
2、快速排序法的性能
在快排的最好时间的复杂度下,如果每次选取分区点时,都能选中中位数,把数组等分成两个,那么此时的时间复杂度和归并一样,都是 O(n*logn)。
而在最坏的时间复杂度下,也就是如果每次分区都选中了最小值或最大值,得到不均等的两组。那么就需要 n 次的分区操作,每次分区平均扫描 n / 2 个元素,此时时间复杂度就退化为 O(n*n) 了。
快速排序法在大部分情况下,统计上是很难选到极端情况的。因此它平均的时间复杂度是 O(n*logn)。
快速排序法的空间方面,使用了交换法,因此空间复杂度为 O(1)。
package main
import "log"
func main() {
arr := []int{2, 3, 4, 1, 23, 1, 78, 34, 3}
log.Println("原始数据:", arr)
quickSort(arr, 0, len(arr)-1)
log.Println("排序后:", arr)
}
// 快速排序
func quickSort(arr []int, start, end int) {
if start >= end {
return
}
q := partition(arr, start, end)
quickSort(arr, start, q-1)
quickSort(arr, q+1, end)
}
// 找到分区点
func partition(arr []int, start, end int) int {
i := start
// 选取最后一位数字作参考
pivot := arr[end]
for j := start; j < end; j++ {
if arr[j] < pivot {
arr[i], arr[j] = arr[j], arr[i]
i++
}
}
arr[i], arr[end] = arr[end], arr[i]
return i
}
以上是关于Go语言快速排序的主要内容,如果未能解决你的问题,请参考以下文章