golang實現快速排序

快速排序的原理就不介紹了。在網上看到一個有趣的視頻,你們能夠看看,很是詳細且有趣。
快速排序視頻
代碼:https://play.golang.org/p/Fw5gtzrPj0golang

package main

import (
    "fmt"
)

func main() {
    var sortArray = []int{3, 41, 24, 76, 11, 45, 3, 3, 64, 21, 69, 19, 36}
    fmt.Println(sortArray)
    qsort(sortArray, 0, len(sortArray)-1)
    fmt.Println(sortArray)
}

func qsort(array []int, low, high int) {
    if low < high {
        m := partition(array, low, high)
        // fmt.Println(m)
        qsort(array, low, m-1)
        qsort(array, m+1, high)
    }
}

func partition(array []int, low, high int) int {
    key := array[low]
    tmpLow := low
    tmpHigh := high
    for {
        //查找小於等於key的元素,該元素的位置必定是tmpLow到high之間,由於array[tmpLow]及左邊元素小於等於key,不會越界
        for array[tmpHigh] > key {
            tmpHigh--
        }
        //找到大於key的元素,該元素的位置必定是low到tmpHigh+1之間。由於array[tmpHigh+1]一定大於key
        for array[tmpLow] <= key && tmpLow < tmpHigh {
            tmpLow++
        }

        if tmpLow >= tmpHigh {
            break
        }
        // swap(array[tmpLow], array[tmpHigh])
        array[tmpLow], array[tmpHigh] = array[tmpHigh], array[tmpLow]
        fmt.Println(array)
    }
    array[tmpLow], array[low] = array[low], array[tmpLow]
    return tmpLow
}
相關文章
相關標籤/搜索