在Golang中,我们常用的查找有两种:
1)顺序查找
2)二分查找
顺序查找:
1)有一个数列:白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王
猜数游戏:从键盘中任意输入一个名称,判断数列中是否包含此名称
案例演示:
func main() {
//思路
//1.定义一个字符串数组
//2.从控制台接收一个名称,依次比较,发现有就提示相应信息
names := [4]string {"白眉鹰王","金毛狮王","紫衫龙王","青翼蝠王"}
var heroName = ""
fmt.Println("请输入要查找的人名...")
fmt.Scanln(&heroName)
//顺序查找:第一种方式
// for i := 0; i < len(names); i++ {
// if heroName == names[i] {
// fmt.Printf("找到%v ,下标%v
", heroName, i)
// break
// } else if i == len(names) -1 {
// fmt.Printf("没找到%v
", heroName)
// }
// }
//循序查找:第2种方式(推荐使用)
index := -1
for i := 0; i < len(names); i++ {
if heroName == names[i] {
index = i //将找到的值对应的下标赋给 index
break
}
}
if index != -1 {
fmt.Printf("找到%v ,下标%v
", heroName, index)
} else {
fmt.Println("没找到", heroName)
}
}
二分查找:
请对一个有序数组进行二分查找 {1,8,10,89,1000,1234},输入一个数,看看该数组是否存在此数,并且求出下标,如果没有就提示"没有这个数" 【会使用到递归】
二分查找的代码实现:
func BinaryFind(arr *[6]int, leftIndex int, rightIndex int, findVal int) {
//判断leftIndex是否大于rightIndex
if leftIndex > rightIndex {
fmt.Println("找不到")
return
}
//先找到中间的下标
middle := (leftIndex + rightIndex) / 2
if (*arr)[middle] > findVal {
//说明我们要查找的数,应该在 leftIndex --- middle-1
BinaryFind(arr, leftIndex, middle - 1, findVal)
} else if (*arr)[middle] < findVal {
//说明我们要查找的数,应该在 middle+1 --- rightIndex
BinaryFind(arr, middle + 1, rightIndex, findVal)
} else {
fmt.Printf("找到了,下标为%v
", middle)
}
}
func main() {
arr := [6]int{1, 8, 10, 89, 1000, 1234}
//测试一把
BinaryFind(&arr, 0, len(arr) - 1, 1111)
}