package main
import "fmt"
//快速排序法
func QuickSort(arr []int, left, right int) {
i := left
r := right
pivot := arr[(right+left)/2]
fmt.Println("pivot", pivot)
//循环查找目标 比这个pivot小的数放到左边
// 比这个pivot大的数放到右边边
f := 1
for i < r {
fmt.Printf("第%d次循环\n", f)
fmt.Println("i", i)
fmt.Println("r", r)
f++
// 查出比基准值arr[pivot]大的key i
for arr[i] < pivot {
fmt.Println("i循环")
i++
fmt.Println("i", i)
}
//找出比基准值arr[pivot]小的key r
for arr[r] > pivot {
fmt.Println("r循环")
r--
// fmt.Println("arr[r]", arr[r])
fmt.Println("r", r)
}
//i大于或等于时终止
if i >= r {
break
}
fmt.Println("i", i)
fmt.Println("r", r)
//找到相应key ,交换
arr[i], arr[r] = arr[r], arr[i]
fmt.Println("arr交换完", arr)
if arr[i] == pivot {
r--
}
if arr[r] == pivot {
i++
}
}
if i == r {
i++
r--
}
if left < r {
quiteSort(arr, left, r)
}
if right > i {
quiteSort(arr, i, right)
}
}
func main() {
arr := []int{-1, 3, 12, 8, 2, 9, 1}
fmt.Println("arr", arr)
QuickSort(arr, 0, len(arr)-1)
fmt.Println("arr", arr)
}