查找算法——折半查找
介绍
折半查找,又称作二分查找。这个查找的算法的特点,就是,要求数据要是有序的。
1 ,存储结构一定是顺序存储
2 ,关键字大小必须有序排列
然后,利用这组有序的数据之间的关系,来进行折半的查找。
比方说,这组数据是升序排列的。一开始,首先对比这组数据的中间的项与关键值(key)的关系。若是关键值(key)>中间值,则说明,关键值(key)在中间值的右侧,因此将这组数据的区间缩小为以中间值为最左侧的小区间。然后,继续用中间值进行比较,以此类推,最终肯定会找到在数组当中与之匹配的关键值,直到区间缩小为0还没找到,就只能是关键值(key)不在数组当中
算法分析
折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止。如果x< a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x。一直这样搜索下去,时间复杂度为O(log N)
代码实现
/折半查找
void binarySearch(int *arr,int length,int key) {//数组左端int left = 0;//数组右端int right = length - 1;//中间int mid;//在左右指针交换之前,查找还没结束while (left <= right) {//更新中间的值mid = (left + right) / 2;//查找成功if (arr[mid] == key) {cout << "find it and its index is " << mid;return;}//若还没有找到,改变左右区间继续寻找if (arr[mid] < key)left = mid + 1;if (arr[mid] > key)right = mid - 1;}cout << "cannot find it" << endl;return;}
查找算法——折半查找相关推荐
- 查找算法——折半查找(JAVA)
折半查找 问题描述:给定一个整数X和整数A0,A1,A2--A(n-1),后者已经预先排序并在内存中,求下标i使得Ai = X ,如果X不在数据中,则返回i = -1. 我们首先可以想到的一种方法就是 ...
- python实现二分查找(折半查找)算法
python实现二分查找算法 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列. 查找又称折半 ...
- php折半查找算法,php二分法查找(也叫折半查找)算法 (数组必须是从小到大的)
//php二分法查找(也叫折半查找)算法/ 数组必须是从小到大的 $abs=array(1,12,13,114,115,116,117,118); //z查找数组的最大下标 $hight = coun ...
- java 用折半查找,java折半查找算法
//当 low>high 时表示查找区间为空,查找失败 } Java 代码: /** * 二分查找算法 * * @param srcArray 有序数组 * @param target 被查找的 ...
- 二分查找(折半查找)算法
一.二分查找算法基本思想 二分查找(Binary Search),又称折半查找,是一种在有序数组(前提条件)中查找某一特定元素的查找算法. 查找过程从数组的中间元素开始,若中间元素正好是要查找的元素, ...
- 数据结构与算法(8-2)有序表查找(折半查找(二分查找)、插值查找)
目录 一.折半查找(二分查找) 二.插值查找 总代码 一.折半查找(二分查找) 原理:一次次折半,不断向着查找值的位置靠近 . 适用场景:有序(必须) 流程:开始时,min标志首,max标志尾,med ...
- 数据结构之二分查找(折半查找)
数据结构之二分查找(折半查找) 二分查找又称折半查找,优点是次数比较少,查找速度快,平均性能好,其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先 ...
- 查找(包括顺序查找和折半查找)
顺序查找 顺序查找又叫线性查找,主要用于线性表中的查找.顺序查找通常情况下分为对一般无序线性表的查找和对按关键字有序的顺序表的查找.下面进行比较讨论: 1.一般线性表的查找 作为一个直观的查找方法,其 ...
- 数据结构与算法笔记(十二)—— 查找算法(顺序查找、二分法查找)
搜索是在一个项目集合中找到一个特定项目的算法过程.搜索通常的答案是真的或假的,因为该项目是否存在.搜索的几种常见方法:顺序查找.二分法查找.二叉树查找.哈希查找 一.顺序查找 最基本的查找技术,过程: ...
最新文章
- mysql如何避免特殊字符查询_如何避免MySQL中的特殊字符?
- android measure的时候报空指针
- EonerCMS——做一个仿桌面系统的CMS(二)
- python批量读取图片并批量保存_Python实现批量读取图片并存入mongodb数据库的方法示例...
- AsyncContext简介
- ExtJS(5)- Ext5的统计图Chart
- 计算机安装系统说明,电脑操作系统安装方法-详细图解说明-简单安装Windows系统...
- 利用canvas制作乱跑的小球
- 彩影2008 白金版 10.1 build 2010
- Ubuntu一些名词解释
- wxpython使用多进程_最简单方法远程调试Python多进程子程序
- Codeforeces——69A Young Physicist
- oracle plsql 绑定变量值,dbms_sqltune解析SQL的BIND_DATA绑定变量值
- 02《区块链财富指北》私钥篇(2):百行Python代码演示一私钥生成多公链公钥原理。
- 源码分析 There is no getter for property named '*' in 'class java.lang.String
- 水星UD6S网卡Linux驱动,水星UD6S无线网卡驱动(修复水星UD6S无线网卡连接异常问题)V1.0 免费版...
- FCC JavaScript 算法和数据结构 正则表达式
- 如何帮助中国8000万中小企业上云?阿里云交出了这样的答卷
- 红米ac2100有ipv6吗_【1222多功能版OpenWrt】红米小米AC2100|IPV6|酸奶|SmartDNS|多拨|猫咪,附教程...
- 智慧管廊数字管道建设整体技术方案2023(word)