/// 快速排序
func Sort(a []int, lo, hi int) {
if hi <= lo {
return
}
j := Partion(a, lo, hi)
Sort(a, lo, j-1 )
Sort(a, j+1, hi)
}
func Partion(a []int, lo, hi int) int {
v := a[lo]
i := lo
j := hi
//array := []int{7,1,100, 88,3,2,8,9,4,5,6}
for {
for i++ ;Less(a[i], v); i++ {
if i == hi { break }
}
for ;Less(v, a[j]); j-- {
if j == lo { break }
}
if i > j { break }
Exchange(a, i, j)
}
ReInsert(a, lo, j)
fmt.Println(a, i, j)
return j
}
func Less(i, j int) bool {
return i < j
}
func Exchange(a []int, i, j int) {
item := a[j]
a[j] = a[i]
a[i] = item
}
// i < j 把 i 插入都 j 的 位置
func ReInsert(a []int, i, j int) {
x := i
item := a[i]
for ; x<j; x++ {
a[x] = a[x+1]
}
a[j] = item
}
查找 a[0] 应该在的位置,并把比 a[0] 小的放在
//func FindRealIndex(a []int, index int) int {
//
//}
/// 插入排序
// j 插入 i 的位置
func Insert(a []int, i, j int) {
if j < i {
return
}
item := a[j]
for x := j; x > i; x-- {
a[x] = a[x-1]
}
a[i] = item
}
// 查找最高 hight 应该在的位置
func FindIndex(a []int, hight int) int {
index := hight
for i := 0; i < hight; i++ {
if a[i] < a[hight] {
continue
} else {
index = i
break
}
}
return index
}
【Golang】快速排序
最新推荐文章于 2024-09-06 10:38:06 发布