Go-快速排序

2019-08-27  本文已影响0人  KN郑某某

快速排序

func partition(nums []int, left int, right int) int {
    value := nums[left] // 基准值
    for left < right {
        for nums[right] >= value && left < right { // 依次查找大于等于基准值的位置
            right--
        }
        nums[left] = nums[right]
        for nums[left] < value && left < right { // 依次查找小于基准值的位置
            left++
        }
        nums[right] = nums[left]
    }
    nums[left] = value
    // 最终 left == right 就是基准值的位置
    return left
}

func QuickSort(list []int, left int, right int) {
    if left < right {
        middle := partition(list, left, right)
        QuickSort(list, left, middle-1)
        QuickSort(list, middle+1, right)
    }
}
func main() {
    list := []int{8, 4, 2, 9, 10, -3, 3, 20, 15, -1}
    QuickSort(list, 0, len(list)-1)
    fmt.Println(list)
}

[-3 -1 2 3 4 8 9 10 15 20]

O (nlogn)

上一篇下一篇

猜你喜欢

热点阅读