快排思想:
1. 查找一个数值pivot
2.在pivot两侧递归排序
3.实现pivot数值左侧比pivot小,右侧比pivot大。
代码实现:
package main
import "fmt"
func main() {
nums := []int{50, 60, 70, 90, 80, 10, 20, 40}
QuickSort(nums, 0, len(nums)-1)
fmt.Println(nums)
}
func QuickSort(num []int, low int, high int) {
if low < high {
pos := Position(num, low, high)
QuickSort(num, low, pos-1)
QuickSort(num, pos+1, high)
}
}
func Position(num []int, low int, high int) int {
pivot := num[low]
i := low
j := high
fmt.Println("i=", i, ";j=", j, ";pivot=", pivot)
for i < j {
for i < j && pivot <= num[j] {
j--
}
num[i] = num[j]
for i < j && pivot >= num[i] {
i++
}
num[j] = num[i]
}
num[i] = pivot
return i
}