`

算法回顾之三:二分查找

 
阅读更多

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

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

二分查找算法

 

基本原理:

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

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

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

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

 

程序实现:

/**
    * 二分查找 
    * @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;
          	}
    	}
    }

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

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

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

 

分享到:
评论

相关推荐

    算法:还有比二分查找更快的算法,判断是否是子字符串IsSubsequence,排序算法数据结构

    首先,让我们回顾一下二分查找的基本思想。在有序数组或字符串中查找特定元素时,二分查找可以显著提高效率。它将搜索范围不断减半,直到找到目标元素或确定其不存在。在解决子序列问题时,二分查找通常用于在目标...

    二分查找算法题个人总结

    这三种场景分别对应了二分查找的不同应用,理解这些变体有助于我们在实际编程中灵活运用二分查找算法。在实际编程中,还需要注意边界条件和异常处理,确保算法的健壮性。此外,对于大型数据集,二分查找的时间复杂度...

    算法:C语言实现(第5部分).

    - **常见算法分类**:排序算法(冒泡排序、快速排序等)、搜索算法(二分查找)、图算法(Dijkstra算法)等。 ### 三、C语言中的算法实现 #### 3.1 排序算法 排序算法是算法学习中最基础也是最重要的部分之一,在...

    45个经典的算法Flash动画演示

    2. **查找算法**:如线性查找、二分查找。线性查找适用于小规模数据,而二分查找则在有序数组中表现出高效性能。 3. **递归与分治**:递归算法如斐波那契数列、汉诺塔问题,分治策略如快速排序、归并排序,都是利用...

    江苏二级C++常考算法

    本文详细介绍了在江苏二级C++考试中常考的一些重要算法,包括排序算法(如冒泡排序、选择排序、插入排序)、查找算法(如线性查找、二分查找)、递归与迭代以及动态规划等。掌握这些算法不仅对于考试至关重要,对于...

    数据结构 与 基础算法,语雀导出的

    * 查找算法:线性查找、二分查找等 * 图结构:图的存储和遍历 * 树结构:二叉树、普通有序树等 * 队列结构:链式队列、顺序循环队列等 * 栈结构:链式栈、顺序栈等 基础算法 基础算法是解决问题的步骤。常见的...

    30个经典算法汇总_带文档和源码

    2. **搜索算法**:包括二分查找、广度优先搜索(BFS)和深度优先搜索(DFS),在数据结构如数组、树和图中寻找目标元素或路径。 3. **图算法**:如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法、...

    麻省理工算法导论视频课程字幕

    2. **搜索算法**:二分查找、广度优先搜索(BFS)和深度优先搜索(DFS)等,这些算法在数据结构中寻找信息或解决路径问题。 3. **图论**:包括最小生成树(如Prim算法和Kruskal算法)、最短路径算法(如Dijkstra算法)...

    python二分查找算法的递归实现方法

    ### Python二分查找算法的递归实现方法 #### 一、引言 在计算机科学领域,**二分查找算法**是一种高效的查找技术,主要用于在有序数组中搜索特定元素。相较于线性查找,二分查找的时间复杂度更低,尤其是在处理大...

    算法分析与设计 试卷

    2. **查找算法**:顺序查找、二分查找、哈希查找等的实现和效率。 3. **图论算法**:深度优先搜索、广度优先搜索、最短路径算法(Dijkstra、Floyd-Warshall、Bellman-Ford)、最小生成树(Prim、Kruskal)等。 4. ...

    华中科技大学中文算法课件

    此章可能会涵盖各种排序算法,如冒泡排序、插入排序、选择排序、快速排序、归并排序等,以及查找算法,如顺序查找、二分查找等。可能还会对比分析它们的时间复杂度和适用场景。 第四章-1:这部分可能是对第四章内容...

    算法设计与分析实验报告.doc

    3. **查找算法**:分析了线性查找、二分查找以及哈希表等查找算法。二分查找在有序列表中的效率较高,而哈希表提供了近乎常数时间的查找速度,但需要额外的内存空间。 4. **图算法**:讨论了图的基本概念,如邻接...

    Python算法教程_中文版.pdf

    4. **搜索算法**:这部分涵盖了线性搜索、二分查找、哈希表查找等基本搜索算法,以及深度优先搜索(DFS)和广度优先搜索(BFS)等图和树的遍历方法。同时,教程还会介绍更高级的搜索策略,如A*搜索算法。 5. **排序...

    算法导论 lecture3

    通过对归并排序和二分查找这两个案例的学习,我们可以更深入地理解分治法设计范式。这种范式不仅有助于简化问题的处理过程,而且还能有效地提高算法的效率。在后续的学习中,我们还会接触到更多基于分治法的高效算法...

    算法1.0000

    2. **排序与搜索**:如冒泡排序、快速排序、归并排序、二分查找等经典算法,这些是数据处理的基础。 3. **图论**:包括图的遍历(深度优先搜索和广度优先搜索)、最短路径算法(如Dijkstra算法和Floyd算法)以及...

    java算法源码大全

    2. **查找算法**:如二分查找、线性查找、哈希查找等,它们在处理数据检索时发挥关键作用。 3. **图算法**:如深度优先搜索(DFS)、广度优先搜索(BFS)、最短路径算法(Dijkstra、Floyd-Warshall)等,对于网络...

    Java经典问题算法大全

    - **定义**:二分查找是一种在有序数组中查找特定元素的高效算法。查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素...

    数据结构和算法-思维导图.pdf

    - 二分查找和二叉搜索树的复杂度分析,平均时间复杂度通常为O(logn)。 - 大多数遍历操作的时间复杂度为O(n^2),比如双重循环。 - 递归操作通常具有O(n)的时间复杂度。 - 线性辅助空间复杂度,例如在进行原地排序...

Global site tag (gtag.js) - Google Analytics