`

算法回顾之三:二分查找

 
阅读更多

算法回顾系列第三篇:二分查找算法

------------------------------------------------

二分查找算法

 

基本原理:

首先,假设表中元素是按升序排列.

将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功.

否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表.

重复以上过程(使用递归),直到找到满足条件的记录,使查找成功,或直到子表不存在为止.

 

程序实现:

/**
    * 二分查找 
    * @param input 已排序的待查数组.
    * @param target 需要插入的数.
    * @param from 当前数组查找范围的起点(0).
    * @param to 当前数组查找范围的终点(length-1).
    * @return 返回目标在数组中,按顺序应在的位置.       
    */
    private static int binarySearch(int[] input, int target, int from, int to){
    	int range = to-from;//如果范围大于0,即存在两个以上的元素(子表),则继续拆分
    	if(range > 0){
    		//选定中间位
    		int mid = (to+from)/2;
    		//如果临界位不满足,则继续二分查找 
    		if (input[mid] > target){//中间位置的元素值大于目标元素(改为小于代表逆序)
    			return binarySearch(input,target,from,mid-1);//在0至中间位置查找
    		}else{//中间位置的元素值小于目标元素
    			return binarySearch(input,target,mid+1,to);//在中间位置到末尾位置查找
    		}
    	}else{
          	if (input[from] > target){//改为小于代表逆序
          		return from;
          	}else{
          		return from + 1;
          	}
    	}
    }

优点:比较次数少,查找速度快,平均性能好.

缺点:要求待查表为有序表,且插入删除困难.

二分查找方法适用于不经常变动而查找频繁的有序列表.

 

分享到:
评论

相关推荐

    C语言版数据结构与算法分析-严蔚敏经典视频教程

    09-001顺序表的查找、有序表的查找、二分查找 09-002顺序表的查找与有序表的查找性能分析 09-003二分查找的平均查找长度、查找树表 09-004动态查找表:二叉排序树的插入和删除操作 09-005查找的性能分析、平衡二叉树...

    计算机算法与程序设计(python)-计算机PPT模板.pptx

    4.1二分搜索 4.2递归 4.3圆二分搜索 第四章测验 第四章编程作业(更正) 第四章二分搜索与递归(4学时) 计算机算法与程序设计(python)-计算机PPT模板全文共34页,当前为第10页。 第五章广度优先搜索与队列 05 计算机...

    leetcode卡-leetcode:每日算法练习

    对常见算法(归并,双指针,二分查找,贪心算法等)有一定了解。 2.找一些经典的题,先想想思路,多想想试试做一下,然后看题解照着多写死记。(自己想不出来不要气馁,好多算法都是好几个数学家一大把年纪提出来的比如...

    leetcode2sumc-Daily-Algorithm-Practice:每天练习新算法和新概念,以拓宽编程知识库

    二分查找 二叉搜索树 二叉树 著名算法 动态规划(Kadane 算法) 尝试(N 数组树) 图(Dijkstra、Union Find、Kruskal、Prim's、最小生成树、拓扑排序等) 字符串 堆栈 队列 数组 排序 哈希表 堆 链表 位操作 递归 ...

    word源码java-leetcode_solution:leetcode_solution

    使用二分查找,寻找一个半有序数组 [4, 5, 6, 7, 0, 1, 2] 中间无序的地方 动态规划 参考链接 题目 实战题目 高级 DP 实战题目 (重点) 题目 字典树和并查集 参考链接 实战题目 参考链接 实战题目 高级搜索 参考...

    gasstationleetcode-cs102:[线性、树、图、DP]

    二分查找和排序 呼吸优先搜索 记忆搜索 队列,双端 二叉树 Dijkstra 算法(BFS) 高级DP 堆 二叉搜索树 联合查找 高级结构(例如段树、二叉索引树等) 课程大纲 - Java 高级算法 算法进阶:同题对应的新问题 第四周 ...

    传智播客扫地僧视频讲义源码

    本教程共分为5个部分,第一部分是C语言提高部分,第二部分为C++基础部分,第三部分为C++进阶部分,第四部分为C、C++及数据结构基础部分,第五部分为C_C++与设计模式基础,内容非常详细. 第一部分 C语言提高部分目录...

    Reversing:逆向工程揭密

    第二类是从没有源代码的程序出发,生成对应的源程序、系统结构以及相关设计原理和算法思想的文档等,亦即本书重点讨论的二进制逆向工程。 本书共有13章和三个附录,涵盖了逆向工程的基础知识、应用、开发和拓展的...

    车辆管理系统课程设计

    回顾起这次课程设计,至今我仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多的东西。同时不仅可以巩固了以前所学到的知识,而且学到了很多在书本上所没有学到过...

    lrucacheleetcode-javascript-LeetCode:javascript-LeetCode

    lru cache leetcode LeetCode LeetCode 经典题目汇总 ( ...二分查找与分治算法 二叉树 哈希表和字符串 Two Pointers 动态规划 二叉搜索树 线段树 Trie 树 并查集 深度优先搜索 广度优先搜索 Design

    网络互连_网桥.路由器.交换机和互连协议

    本书被认为是讲述网络理论和实践的主要书籍之一。除介绍了一般的网络概念外,对路由算法和协议、编址、网桥、路由器、交换机和集线器的功能结构等都提供了权威和全面的信息。包括网络领域的最新发展,如交换和桥接...

    用C编写班级成绩管理系统

    三、算法提示: 1、数据结构:结构体类型数组。 2、数据库结构:下表构成该系统的基本数据库。 姓名 学号 课程名称1 课程名称2 ●●●●●● char Char float float 四、测试数据: 学生人数N=10 课程门数M=4...

    Python实现二叉搜索树

    我们讨论两种ADT MAP的实现方式,基于列表的二分查找和哈希表。在这一节中,我们将要学习二叉搜索树,这是另一种键指向值的Map集合,在这种情况下我们不用考虑元素在树中的实际位置,但要知道使用二叉树来搜索更有效...

    Absolute C++中文版(原书第2版)-完美的C++教程,文档中还包含英文版

    13.3.2 二分查找 398 13.3.3 编码 400 13.3.4 检查递归的正确性 402 13.3.5 效率 402 第14章 继承 410 14.1 继承基础 410 14.1.1 派生类 410 14.1.2 派生类的构造函数 417 14.1.3 protected限定词 420 ...

    Java开发技术大全 电子版

    11.3.3二分查找364 11.4遗留的类和接口366 11.4.1Enumeration接口简介366 11.4.2向量类(Vector)使用示例367 11.4.3栈(Stack)使用示例369 11.4.4字典(Dictionary)简介370 11.4.5哈希表(Hashtable)简介...

    Android学习系列教程实例.pdf

    1.1. Android 的发展历史回顾 ............... 10 1.1.1. Android 系统的发布 .............. 10 1.1.2. Android 版本的发展情况 ...... 10 1.2. Android 系统架构 ........................... 12 1.2.1. 应用程序...

Global site tag (gtag.js) - Google Analytics