package main
import "fmt"
func QuickSort(A []int, p, r int) {
if p < r {
q := Partition(A, p, r)
QuickSort(A, p, q-1)
QuickSort(A, q+1, r)
}
}
func Partition(A []int, p, r int) int {
x := A[p]
i := p
for j := p + 1; j <= r; j++ {
if A[j] <= x {
i++
A[i], A[j] = A[j], A[i]
}
}
A[p], A[i] = A[i], A[p]
return i
}
func main() {
A := []int{3, 6, 9, 9, 8, 4, 2, 1}
fmt.Println(A)
QuickSort(A, 0, len(A)-1)
fmt.Println(A)
}