package main
import (
"fmt"
"math/rand"
)
// 如果數量小于13直接用插入排序
func SortForMerge(arr []int, left, right int) {
for i:=left; i<=right; i++ {
temp := arr[i]
var j int
for j=i; j>left && temp < arr[j-1]; j-- {
arr[j] = arr[j-1]
}
arr[j] = temp
}
}
func swap(arr []int,i, j int) { // 數據交換
arr[i], arr[j] = arr[j], arr[i]
}
func QuickSortX(arr []int, left, right int) {
if right - left < 2 {
SortForMerge(arr, left, right) // 如果數量小于3直接用插入排序
} else { // 使用快速排序
// 隨機找一個數字
swap(arr, left, rand.Int()%(right-left+1) + left )
vdata := arr[left] // 坐標數據,比我小往左,大往右
lt := left // < vdata
gt := right + 1 // > vdata
i := left+1 // == vdata
for i < gt {
if arr[i] > vdata {
swap(arr, gt-1, i) //移動到大于的地方
gt--
} else if arr[i] < vdata {
swap(arr, i, lt+1) //移動到小于的地方
lt++ //前進循環
i++
} else {
i++
}
}
swap(arr, lt, left)
QuickSortX(arr, left, lt-1) //遞歸處理小于那一段
QuickSortX(arr, gt, right) //遞歸處理大于那一段
}
}
func main() {
arr := []int{3, 5, 2, 1, 5, 6, 9, 0}
fmt.Println("排序前:", arr)
QuickSortX(arr, 0 , len(arr)-1)
fmt.Println("排序后:", arr)
}
2、golang快速排序改進版
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
推薦閱讀更多精彩內容
- 戒邪淫,心地光明引以為戒,切莫邪淫 一.荷蘭國旗問題 給定一個數組arr,和一個數num,請把小于num的數放在數...