码迷,mamicode.com
首页 > 编程语言 > 详细

排序和查找2

时间:2019-08-24 00:33:16      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:can   return   应该   ret   middle   提示   查找   color   中间   

在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 \n", heroName, i)
      // break
    // } else if i == len(names) -1 {
      // fmt.Printf("没找到%v \n", 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 \n", 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 \n", middle)
  }

}

func main() {

  arr := [6]int{1, 8, 10, 89, 1000, 1234}

  //测试一把
  BinaryFind(&arr, 0, len(arr) - 1, 1111)
}

排序和查找2

标签:can   return   应该   ret   middle   提示   查找   color   中间   

原文地址:https://www.cnblogs.com/green-frog-2019/p/11402985.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!