AI智能
改变未来

go中查找应用


一 点睛

在 Golang 中,常用的查找有两种。

1 顺序查找

2 二分查找(该数组必须有序)

二 顺序查找

1 需求

有一个数列:白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王

猜猜游戏:从键盘中任意输入一个名称,判断数列中是否包含此名称

2 代码

package mainimport ("fmt")func main() {// 思路// 1 定义一个数组:白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王。字符串数组// 2 从控制台接收一个名字,依次比较,如果发现有,提示names := [4]string{"白眉鹰王", "金毛狮王", "紫衫龙王", "青翼蝠王"}var heroName = ""fmt.Println("请输入要查找的人名...")fmt.Scanln(&heroName)// 顺序查找:第1种方式for i := 0; i < len(names); i++ {if heroName == names[i] {fmt.Printf("找到%v , 下标%v \\n", heroName, i)break} else if i == (len(names) - 1) {fmt.Printf("没有找到%v \\n", heroName)}}// 顺序查找:第2种方式index := -1for i := 0; i < len(names); i++ {if heroName == names[i] {index = i // 将找到的值对应的下标赋给 indexbreak}}if index != -1 {fmt.Printf("找到%v , 下标%v \\n", heroName, index)} else {fmt.Println("没有找到", heroName)}}

3 测试

请输入要查找的人名...白眉鹰王找到白眉鹰王 , 下标0找到白眉鹰王 , 下标0

三 二分查找

1 需求

请对一个有序数组进行二分查找 {1,8, 10, 89, 1000, 1234} ,输入一个数看看该数组是否存在此数,并且求出下标,如果没有就提示"没有这个数"。

2 图解

3 代码

package mainimport ("fmt")/*二分查找的思路: 要查找的数是 findVal1 arr是一个有序数组,并且是从小到大排序。2 先找到 中间的下标 middle = (leftIndex + rightIndex) / 2, 然后让中间下标的值和findVal进行比较。2.1 如果 arr[middle] > findVal ,  就应该在  leftIndex — (middle - 1) 这个范围查找2.2 如果 arr[middle] < findVal ,  就应该在  middel+1—rightIndex 这个范围查找2.3 如果 arr[middle] == findVal, 找到2.4 上面的2.1 2.2 2.3 的逻辑会递归执行3 退出递归的条件if  leftIndex > rightIndex {// 找不到..return ..}*/// 二分查找的函数func BinaryFind(arr *[6]int, leftIndex int, rightIndex int, findVal int) {// 判断leftIndex 是否大于 rightIndexif leftIndex > rightIndex {fmt.Println("找不到")return}// 先找中间的下标middle := (leftIndex + rightIndex) / 2if (*arr)[middle] > findVal {// 说明查找的数在  leftIndex - middel-1 这个范围BinaryFind(arr, leftIndex, middle-1, findVal)} else if (*arr)[middle] < findVal {// 说明查找的数在  middel+1 - rightIndex 这个范围BinaryFind(arr, middle+1, rightIndex, findVal)} else {// 找到了fmt.Printf("找到了,下标为%v \\n", middle)}}func main() {arr := [6]int{1, 8, 10, 89, 1000, 1234}BinaryFind(&arr, 0, len(arr)-1, 1000)}

4 测试

找到了,下标为4

 

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » go中查找应用