golang算法实现
golang 实现一个快排
思想
大而化小, 分而治之
将列表看成, 左边, 中值, 右边, 三部分, 使用递归的思想.所有的中值都会排好序, 数列就会排好序
实现
package main
import "fmt"
var testList = make([]int, 10)
func quickSort(unSortList []int) {
// 分裂准备
quickHelper(unSortList, 0, len(unSortList)-1)
}
func quickHelper(aList []int, first, last int){
if first < last{
//获取分裂点
splitPoint := partition(aList, first, last)
//通过分裂点, 将左右两个子列表分别快排
quickHelper(aList, first, splitPoint-1)
quickHelper(aList, splitPoint+1, last)
}
}
// 获取中值
func partition(aList []int, first, last int)int{
pivotValue := aList[first]
leftMark := first+1
rightMark := last
done := false
for !done{
for leftMark <= rightMark && aList[leftMark] <=pivotValue{
leftMark ++
}
for rightMark >= leftMark && aList[rightMark]>=pivotValue{
rightMark --
}
if rightMark < leftMark{
done = true
}else {
temp := aList[leftMark]
aList[leftMark] = aList[rightMark]
aList[rightMark] = temp
}
}
//中值就位
temp := aList[first]
aList[first] = aList[rightMark]
aList[rightMark] = temp
return rightMark
}
func main() {
testList = []int{9, 7, 2, 323, 43, 5, 6, 66, 45}
quickSort(testList)
fmt.Println(testList) //[2 5 6 7 9 43 45 66 323]
}