这是最近重新巩固的快速排序,快速排序1.0和2.0版本时间复杂度都是O(N²),快速排序3.0版本的时间复杂度为O(N*logN)。
快速排序思想:以数组的最后一个数为靶心,数组会分为三个区域(区域内不一定有序):大于靶心的放在右侧,小于靶心的放在左侧,等于靶心的放在中间(这里的分区域放置实现是使用交换的方式)。
快速排序3.0对靶心的选取是通过随机选取,并与数组的最后一位交换来作为靶心,所以是它与概率有关,每个数做靶心的机会都是随机的。
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
arr := []int{
3,2,8,5,9,0,2,3,1,5,6,4,7,8}
quickSort(arr