1. 顺序查找
- package main
- import (
- "fmt"
- )
- 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 \n", heroName, i)
- // break
- // } else if i == (len(names) - 1) {
- // fmt.Printf("没有找到 %v \n", heroName)
- // }
- //}
- // 顺序查找: 第 2 种方式
- index := -1 // 先定义一个下标, 如果找到, 则下标值改变, 否则一直为 - 1
- for i := 0; i < len(names); i++ {
- if heroName == names[i] {
- index = i // 将找到的值对应的下标赋给 index
- break
- }
- }
- if index != -1 {
- fmt.Printf("找到 %v , 下标 %v \n", heroName, index)
- } else {
- fmt.Println("没有找到", heroName)
- }
- }
- package main
- import (
- "fmt"
- )
- // 二分查找的函数
- /*
- 二分查找的思路: 比如我们要查找的数是 findVal
- 1. 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) { //arr *[6]int 接收的是数组的指针
- // 判断 leftIndex 是否大于 rightIndex
- if leftIndex> rightIndex {
- fmt.Println("找不到")
- return
- }
- // 先找到 中间的下标
- middle := (leftIndex + rightIndex) / 2
- if (*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, -6) // 上面接收指针, 这里要传地址
- }
来源: http://www.bubuko.com/infodetail-3392849.html