这篇文真虽然是写的二分法,但是二分法依赖有序的数据,所以在使用查找之前先用了一个冒泡排序
package main
import (
"fmt"
)
// 冒泡排序的函数主体开始
func bubble(arr []float32) {
times := len(arr)
for i := 1; i < len(arr); i++ {
for i := 1; i < times; i++ {
if arr[i-1] > arr[i] {
var temp float32
temp = arr[i-1]
arr[i-1] = arr[i]
arr[i] = temp
}
}
times--
}
}
// 冒泡排序的函数主体结束
// 二分法查找
func dichoto(findarr []float32, findVal float32) string {
times := 0
rr := len(findarr)
Val := 0
leftIndex := 0
rightIndex := rr - 1
middle := (leftIndex + rightIndex) / 2
for {
middle = (leftIndex + rightIndex) / 2
times++
if leftIndex > rightIndex {
break
} else if findarr[middle] > findVal {
rightIndex = middle - 1
continue
} else if findarr[middle] < findVal {
leftIndex = middle + 1
continue
} else {
Val = middle
break
}
}
if leftIndex > rightIndex {
res := fmt.Sprintf("数组没有这个数")
return res
}
res := fmt.Sprintf("找到了下标是%v,用了%v次", Val, times)
return res
}
func main() {
// 设置一个切片进行测试
arr1 := []float32{24, 69, 80, 57, 13}
bubble(arr1)
fmt.Println(arr1)
// 给切片添加新的数字,进一步测试
arr2 := append(arr1, 45, 97, 86)
bubble(arr2)
fmt.Println(arr2)
var findVal float32
fmt.Println("已排序完毕,请输入你想超找的数字")
fmt.Scanln(&findVal)
res := dichoto(arr2, findVal)
fmt.Println(res)
}
网友评论