package main
import "fmt"
func main() {
var n int
if err := input(&n); err != nil {
return
}
arr := make([]int, n)
for i := 0; i < n; i++ {
if err := input(&arr[i]); err != nil {
return
}
}
quickSort(arr, 0, n - 1)
for _, v := range arr {
fmt.Printf("%d ", v)
}
}
func quickSort(arr []int, l int, r int) {
if l >= r {
return
}
pivot := arr[(l + r) / 2]
left, right := l, r
for left <= right {
for arr[left] < pivot {
left++
}
for arr[right] > pivot {
right--
}
if left <= right {
arr[left], arr[right] = arr[right], arr[left]
left++
right--
}
}
if right > l {
quickSort(arr, l, right)
}
if left < r {
quickSort(arr, left, r)
}
}
func quickSort2(arr []int) {
if len(arr) <= 1 {
return
}
pivot := arr[len(arr)/2]
left, right := 0, len(arr)-1
for left <= right {
for arr[left] < pivot {
left++
}
for arr[right] > pivot {
right--
}
if left <= right {
arr[left], arr[right] = arr[right], arr[left]
left++
right--
}
}
if right > 0 {
quickSort2(arr[:right+1])
}
if left < len(arr) {
quickSort2(arr[left:])
}
}
func input(target *int) error {
_, err := fmt.Scanf("%d", target)
return err
}
quickSort2():利用 Go 语言 Slice 共享内存的特性,可省去 l,r 参数;