快速排序

2020-11-04  本文已影响0人  hszz

排序简介(采用了分治+递归)

复杂度

golang实现

package main

import "fmt"

// 快速排序
func partion(arr []int, start, end int) int {
    pivot, i, j := arr[start], start, end
    // 将第一个元素作为pivot
    for i < j {
        for i < j && pivot < arr[j] { // 从右边开始找出小于pivot
            j--
        }
        if i < j {
            arr[i] = arr[j]
            i++
        }

        for i < j && arr[i] < pivot { // 找出大于pivot
            i++
        }
        if i < j {
            arr[j] = arr[i]
            j--
        }
    }
    arr[i] = pivot //这时i是pivot最终位置
    return i
}

func QuickSort(arr []int, start, end int)  {
    if start < end {
        d := partion(arr, start, end)
        QuickSort(arr, start, d-1)
        QuickSort(arr, d+1, end)
    }
}

func main()  {
    arr := []int{33,11,55,7,44,1}
    QuickSort(arr, 0, len(arr)-1)
    fmt.Println(arr)
}
上一篇 下一篇

猜你喜欢

热点阅读