`
chiyx
  • 浏览: 273568 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

不一样的二分查找-只比较一次的2分查找实现

阅读更多
  • 正常进行2次比较的二分查找实现,取列表中点值,(1)先比较x是否小于v[mid],若小于则说明在mid的左侧,(2)继续比较x是否大于v[mid],若大于则说明在mid的右侧
  • (3)否则mid即为x的位置
    int binsearch(int x, int v[], int n) {
    	int low, high, mid;
    	low = 0;
    	high = n - 1;
    	while(low <= high) {
    		mid = low + high;
    		if (x < v[mid]) {
    			high = mid - 1;
    		}
    		else if (x > v[mid]) {
    			low = mid + 1;
    		}else {
    			return mid;
    		}
    	}
    	return -1;
    }
    
  • 只进行1次比较的二分查找实现,取列表中点值,(1)比较x是否小于v[mid],若小于则说明在mid的左侧 (2)否则记录下当前mid的值,继续往右比较
  • (3)查找结束后,对比记录下的位置所对应的值是否等于x
    int binsearch2(int x, int v[], int n) {
    	int low, high, mid, cur;
    	cur = -1;
    	low = 0;
    	high = n - 1;
    	while (low <= high) {
    		mid = (low + high) / 2;
    		if (x < v[mid]) {
    			high = mid -1;
    		}else {
    			cur = mid;
    			low = mid + 1;
    		}
    	}
    	return (cur != -1 && v[cur] == x)? cur : -1;
    }
    



    第二种方式减少了循环内的比较次数,但是可能增加本身循环的次数(第一种方式,在mid=x时就可以退出循环了,但第二种的循环结束条件为low 〉high)但因为是o(logN)所以循环次数增加的不多,还没进行实际的性能测试,以后补上。
    分享到:
    评论

    相关推荐

      C++实现折半查找(二分查找)算法(含实现原理和步骤)

      折半查找,也称为二分查找(Binary Search)或对数查找(Logarithmic Search),是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;...

      javascript实现二分查找法实现代码

      在js中可能会更灵活的用到a-z上,或者用到拼音…或者用到…… 不过值得深思的一个问题是,如果为了实现对拼音之类的二分查找.而经过如下流程是否值得: 1。对拼音排序,貌似代码量不小吧。 2。然后再二分查找。这又...

      数据结构第九章 查找作业及答案(100分).docx

      1.在有序表A[1..18]中,采用二分查找算法查找元素值等于A[7]的元素,所比较过的元素的下标依次为 。 2.利用逐点插入法建立序列(61,75,44,99,77,30,36,45)对应的二叉排序树以后,查找元素36要进行 次元素间...

      Python实现二分查找与bisect模块详解

      前言 其实Python 的列表(list)内部实现是一个数组,也就是一个线性表。在列表中查找元素可以使用 list.index() 方法,其时间复杂度为O(n) 。...二分查找也成为折半查找,算法每一次比较都使搜索范围缩小一半, 其时间

      计算机二级公共基础知识

      顺序查找法每一次比较,只将查找范围减少1,而二分法查找,每比较一次,可将查找范围减少为原来的一半,效率大大提高。 对于长度为n的有序线性表,在最坏情况下,二分法查找只需比较log2n次, 二级公共...

      jQuery完全实例.rar

      这个函数的作用如同$(document).ready()一样,只不过用这个函数时,需要把页面中所有需要在 DOM 加载完成时执行的$()操作符都包装到其中来。从技术上来说,这个函数是可链接的--但真正以这种方式链接的情况并不多...

      c++ 面试题 总结

      1.是不是一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态? virtual修饰符会被隐形继承的。 private 也被集成,只事派生类没有访问权限而已 virtual可加可不加 子类的空间里有父类...

      入门学习Linux常用必会60个命令实例详解doc/txt

      不同Linux发行版的命令数量不一样,但Linux发行版本最少的命令也有200多个。这里笔者把比较重要和使用频率最多的命令,按照它们在系统中的作用分成下面六个部分一一介绍。 ◆ 安装和登录命令:login、shutdown、...

      grub4dos-V0.4.6a-2017-02-04更新

      作用之二,直接作为菜单的背景(即不加载图像背景)。此时只设置字体的前景色即可。 2.增加动画菜单。 splashimage --animated=[type]=[delay]=[last_num]=[x]=[y] START_FILE 类型[type]:bit 0-3: 播放次数 bit...

      ExtAspNet v2.2.1 (2009-4-1) 值得一看

      -一个典型应用,在Window控件中打开新页面,如果传递的参数不正确,则首先提示参数不对然后关闭此弹出窗口。 -ExtAspNet.Alert.Show("参数错误!", String.Empty, ExtAspNet.ActiveWindow.GetCloseReference());...

      特征码定位MYCLL特征码定位

      我们可以看下图,和第一次的时候开始为止和分段长度都不一样了。我们用和上面同样的方法定位,一直定位到长度为2个字节。 点生成,杀毒。然后点“二次处理”,再次杀毒,再点“二次处理”,杀毒,“二次处理”,...

      新版Android开发教程.rar

      � 基于 QEMU 开发的模拟器调试手段不十分丰富,只支持通话、SMS等,速度慢。 � 暂不具备 Push Mail 和 Office(DataViz 、 QuickOffice 计划近期推出 ) 功能,目前主要面向的是普通消费 者 用户,对商业用户支持...

      如何编写批处理文件批处理文件批处理文件

      简明批处理教程22009年10月20日 星期二 下午 05:35 最近对于批处理技术的探讨比较热,也有不少好的批处理程序发布,但是如果没有一定的相关知识恐怕不容易看懂和理解这些批处理文件,也就更谈不上自己动手编写了,古...

      java源码包2

      一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源...

      飞恒进销存管理系统v7.21(源代码)

      1、 服装版由于采用clientDataset,判断单的修改、新增状态不一样导致修改单时增加一行,并不对之进行处理。 a) 同时判断Query和CleintDataset的状态 b) 保存时重新读入颜色,保证状态的一致。 V7.18.4的修改...

      正则表达式

      {n, m} 匹配前一项至少n次,但是不能超过m次 {n, } 匹配前一项n次,或者多次 {n} 匹配前一项恰好n次 ? 匹配前一项0次或1次,也就是说前一项是可选的. 等价于 {0, 1} + 匹配前一项1次或多次,等价于{1,} * 匹配前一...

      算法导论(part2)

      由于书中给出的内容比较多,只讲一学期一般讲不完,因此,教师们应该将本书看成是一种“缓存区”或“瑞典式自助餐”,从中挑选出能最好地支持自己希望教授的课程的内容。 教师们会发现,要围绕自己所需的各个章节来...

      Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好

      后打开另一个窗口,一个是打开另一个窗口而自身不消失。可以看到他们实现的 方法是不同的。 三、Qt Creator 登录对话框(原创) 实现功能: 在弹出对话框中填写用户名和密码,按下登录按钮,如果用户名和密码均正确...

      vc++ 开发实例源码包

      该实例可进行局域网的聊天、一对多、多对一、和多对多的传送和续传,理论上这是我本人的实现目的,而且目前经测试已基本实现了上述功能,而且网速一般有几M/S。另外有只打开一个应用程序、CRichEdit的使用、最小到...

    Global site tag (gtag.js) - Google Analytics