用go实现快速排序:
思路:拿数组一个值 (一般是第一个)作为基准,创建两个空数组(大数组,小数组 ),遍历当前排序数组,所有大于基准值的放在 大数组,所有小于基准值的放在小数组,采用递归思想,最快n(log n), 最慢n^2
package main
import "fmt"
//快速排序
func main() {
n := make([]int, 10)
n[0] = 7
n[1] = 2
n[2] = 6
n[3] = 10
n[4] = 5
n[5] = 3
n[6] = 9
n[7] = 4
n[8] = 8
n[9] = 1
s := quickSort(n , 10)
fmt.Printf("quickSort %d\n", s)
lens := len(s)
for i := 0; i< lens ;i++ {
fmt.Printf("Element[%d] = %d\n", i, s[i] )
}
}
func quickSort(n []int , lens int) []int{
if(lens < 2){
return n
}
lf := make([]int, 10)
rt := make([]int, 10)
num := n[0]
lfnm := 0
rtnm := 0
for i := 1; i< lens ;i++ {
if n[i] < num {
lf[lfnm] = n[i]
lfnm ++
}else{
rt[rtnm] = n[i]
rtnm ++
}
}
lf = quickSort(lf, lfnm)
rt = quickSort(rt, rtnm)
return merge(lf, n,rt,lfnm , 1,rtnm)
}
func merge(a []int, b []int, c []int , la int, lb int,lc int) []int{
to := make([]int ,la+lb+lc)
for i := 0 ; i< (la + lb + lc); i++{
if i < la {
to[i] = a[i]
}else if i< la+lb {
to[i] = b[i-la]
}else {
to[i] = c[i-la-lb]
}
}
return to
}