Go语言二分之查找

栏目: Go · 发布时间: 5年前

内容简介:二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列查找过程:

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列

查找过程:

首先,假设表中元素是按升序排列,将表中间位置记录的 关键字 与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置 记录 将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的 记录 ,使查找成功,或直到子表不存在为止,此时查找不成功。

算法要求:

1.必须采用顺序存储结构。

2.必须按关键字大小有序排列。

要求:

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

Go语言二分之查找

/

二分查找的函数

/*

二分查找的思路 : 比如我们要查找的数是

findVal

1. arr

是一个有序数组,并且是从小到大排序

2. 先找到 中间的下标 middle = (leftIndex + rightIndex) / 2, 然后让 中间下标的值和 findVal 进行

比较

3. 想一下,怎么样的情况下,就说明找不到 [ 分析出退出递归的条件 !!] if leftIndex > rightIndex {

// 找不到 ..

return .. }

*/

package main

import "fmt"

func BinarySearch(arr *[6]int,leftIndex int,rightIndex int ,findVal int ){
   if  leftIndex > rightIndex{
      fmt.Printf("%v中找不到\t元素%v\n",(*arr),findVal)
      return
   }

   //先找到中间下标
   midddle := (leftIndex+rightIndex)/2
   if   (*arr)[midddle] >findVal {
      //说明要查找的数在左边  就应该向 leftIndex ---- (middle - 1)再次查找
      BinarySearch(arr,leftIndex,midddle-1,findVal)
   }else if  (*arr)[midddle] < findVal{
      //如果 arr[middle] < findVal , 就应该向 middel+1---- rightIndex
      BinarySearch(arr,midddle+1,rightIndex,findVal)
   }else {
      //找到了
      fmt.Printf("%v中找到元素%v,下标为%v\n",(*arr),findVal,midddle)
   }


}


func main() {
     ArraryNum := [6]int{1,8, 10, 89, 1000, 1234}
     ArraryNum2 := [6]int{8,200, 300, 889, 1000, 1234}
   BinarySearch(&ArraryNum,0,len(ArraryNum),1234)
   BinarySearch(&ArraryNum2,0,len(ArraryNum),300)
   BinarySearch(&ArraryNum,0,len(ArraryNum),-8)
   BinarySearch(&ArraryNum2,0,len(ArraryNum),30)
}

//结果

Go语言二分之查找


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Scrum敏捷软件开发

Scrum敏捷软件开发

Mike Cohn / 廖靖斌、吕梁岳、陈争云、阳陆育 / 清华大学出版社 / 2010-11 / 69.00元

《Scrum敏捷软件开发》是敏捷联盟及Scrum联盟创始人之一、敏捷估算及计划的鼻祖Mike Cohn三大经典著作中影响最为深厚的扛鼎之作,也是全球敏捷社区中获得广泛肯定的企业敏捷转型权威参考。作者花四年时间,把自己近十五年的敏捷实践经验,特别是近四年中针对各种敏捷转型企业的咨询和指导工作,并结合旁征博引的方式,从更高的思想层次对敏捷与Scrum多年来的经验和教训进行深入而前面的梳理和总结,最终集......一起来看看 《Scrum敏捷软件开发》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具