這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
快速排序的原理就不介紹了。在網上看到一個有趣的視頻,大家可以看看,非常詳細且有趣。
快速排序視頻
代碼:https://play.golang.org/p/Fw5gtzrPj0
package mainimport ( "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}