美文网首页
Go-快速排序

Go-快速排序

作者: KN郑某某 | 来源:发表于2019-08-27 16:59 被阅读0次

    快速排序

    • 算法实现
    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)

    相关文章

      网友评论

          本文标题:Go-快速排序

          本文链接:https://www.haomeiwen.com/subject/fjwkectx.html