1. 搜索:就是在数组中寻找一个指定元素的过程。例如:查找一个商品价格列表中指定价格的商品。
    在讨论二分搜索方法前先说下顺序搜索:

  2. 顺序搜索
    将关键字key顺序地与数组中每个元素进行比较,这个过程一直持续下去,直至关键字与某个元素匹配,或者所有数组元素都已比较完毕。

int linearSearch(int list[],int key,int arraySize)
{for(int i = 0; i< arraySize; i++){if(key == list[i])//顺序比较key值与list数组中的元素{return i;//返回查找到的数组的下标}}return -1;//-1表示没找到
}
  1. 二分搜索(查找)方法
    二分搜索是一种常用的搜索方法,**它要求数组中的元素必须是有序存放的,**二分搜索方法首先将关键字与位于数组中央的元素进行比较。比较结果有三种情况:

    • 如果关键字小于中央元素,只需继续在数组的前半部分进行搜索。

    • 如果关键字与中央元素相等,则搜索结束,找到匹配元素。

    • 如果关键字大于中央元素,只需继续在数组的后半部分进行搜索。

      使用二分搜索方法,每经过一次搜索,二分搜索方法会将搜索范围缩小一半。假定数组元素个数为n,为方便计算,假定n是2的幂。那么第一次比较后,只剩n/2个元素需要继续搜索;第二次比较后只剩下(n/2)/2个元素需要继续搜索。则第k次比较后,剩下n/2k个元素需要继续搜索。当k=log2n(以2为底n的对数),只剩下一个元素了,因而只需要再进行一次比较。因此二分搜索方法在一个已排序数组中查找一个关键字,在最坏情况下只需log2n(以2为底n的对数)+1次比较操作,对于一个有1024个(210)元素的列表,二分搜索在最坏情况下只需11次比较,而顺序搜索方法在最坏情况下需1024次比较。
      二分搜索方法在每次比较之后,会将需要搜索的数组范围缩小一半,可以用变量low和high分别表示当前搜索的数组区域的首下标和尾下标,则变量mid的值就为(low+high)/2.

int binarySearch(int list[], int key, int arraySize)
{int low = 0;int high = arraySize - 1;int mid;while (high >= low){mid = (low + high) / 2;if(key < list[mid]){high = mid - 1;}else if(key == list[mid){return mid;}else{low = mid + 1;} }return  -1;//-1表示没搜索到
}

二分搜索(查找)方法相关推荐

  1. Go语言中字符串的查找方法小结

    这篇文章主要介绍了Go语言中字符串的查找方法小结,示例的main函数都是导入strings包然后使用其中的方法,需要的朋友可以参考下 1.func Contains(s, substr string) ...

  2. 基于bs4库的HTML内容查找方法

    一.信息提取实例 提取HTML中所有的URL链接 思路:1)搜索到所有的<a>标签 2)解析<a>标签格式,提取href后的链接内容 >>> import r ...

  3. 父类可以调用子类的方法吗_python类的继承、多继承及查找方法顺序

    讲解类的继承,先用无__init__()方法的类讲解,会更容易理解 分三部分讲解 1.单继承(无__init__()方法) 继承方式:子类(父类): 方法重写:防止执行父类的方法.不想继承父类的某个方 ...

  4. spring aop示例_Spring查找方法示例

    spring aop示例 当一个bean依赖于另一个bean时,我们使用setter属性或通过构造函数注入bean. getter方法将向我们返回已设置的引用,但是假设您每次调用getter方法时都想 ...

  5. Spring查找方法示例

    当一个bean依赖于另一个bean时,我们使用setter属性或通过构造函数注入bean. getter方法将向我们返回已设置的引用,但是假设您每次调用getter方法时都想要一个依赖bean的新实例 ...

  6. python list方法说明_对python中list的五种查找方法说明

    Python中是有查找功能的,五种方式:in.not in.count.index,find 前两种方法是保留字,后两种方式是列表的方法. 下面以a_list = ['a','b','c','hell ...

  7. java 基于类路径搜索_一种基于ClassLoader的自定义类查找方法与流程

    本发明涉及IT技术领域,特别是指一种基于ClassLoader的自定义类查找方法. 背景技术: 随着信息系统的复杂性日益增大,使用反射机制设计的系统越来越多.根据不同的业务需要通过反射去获得相应的处理 ...

  8. jQuery学习(十二)—jQuery中对象的查找方法总结

    jQuery学习(十二)-jQuery中对象的查找方法总结 一.find方法 作用:在元素1中查找元素2,类似于选择器中的后代选择器 格式:元素1.find(元素2),元素2为CSS选择器或者jQue ...

  9. python list find函数_对python中list的五种查找方法说明

    Python中是有查找功能的,五种方式:in.not in.count.index,find 前两种方法是保留字,后两种方式是列表的方法. 下面以a_list = ['a','b','c','hell ...

最新文章

  1. python的__new__方法和__del__方法
  2. 2---信息系统集成专业技术知识(精简题目)
  3. 互信息 卡方 - 文本挖掘
  4. 2021最新报告:一文洞察智慧金融发展现状
  5. 【媒体服务质量监控与QoE】
  6. Codeforces 338 D. GCD Table
  7. VUE : 双重 for 循环写法、table 解析任意 list 、万能表格组件、解析一维数组、动态生成 table 所有数据
  8. 信安精品课:第1章网络信息安全概述精讲笔记
  9. css之背景图固定大小不变、不重复、充满整个页面
  10. 微服务 注册中心的作用_SpringCloud(二)服务注册中心与Eureka工作原理介绍
  11. git init github
  12. The way to Go(5): 文件名、关键字与标识符
  13. 关于TRACERT和TTL
  14. 使用Javascript动态添加和删除元素
  15. 第六届“强网杯”全国网络安全挑战赛-青少年专项赛
  16. 在一起计时器_浅谈§1.4 实验:用打点计时器测速度
  17. 支付宝"手机网站支付"主域名申请了,二级域名还要申请吗
  18. Maven+Nexus私服搭建
  19. Python解释器和IDE的安装
  20. 记录小问题(想到啥放啥)

热门文章

  1. uniapp form表单validator函数校验
  2. 淘宝开店8大绝招(转)
  3. weex android 简书,weex打包Android和IOS
  4. mcp pip_ROM|掌指关节(MCP)或指间关节(PIP或DIP)伸展
  5. 对于过去完成时的一点理解
  6. php魔术方法call,PHP魔术方法__call()
  7. Kubeedge安装配置
  8. SharePoint Modern Page 的脚本引入部件
  9. C语言:二维数组求和
  10. 从事财务管理系统开发两年以来