重温二分查找算法

简介: 二分查找在学习算法的时候会涉及到,算是一个基本的分治思想,对于算法的实现大家也都是很熟悉的,但是这个时候真会犯眼高手低的毛病。不信你自己试试,看你能够在段时间内写出可运行的二分查找算法。
二分查找在学习算法的时候会涉及到,算是一个基本的分治思想,对于算法的实现大家也都是很熟悉的,但是这个时候真会犯眼高手低的毛病。不信你自己试试,看你能够在段时间内写出可运行的二分查找算法。
二分查找算法的思想非常易于理解,但是能够写出一个准确的二分查找程序绝非一个很简单的事情,从历史上来看,二分思想早在1946年就出现了,但是第一个完全正确的二分查找算法确实在1962年出现,计算机专家曾说过,90%以上的计算机专家不能再2个小时内写出完全正确的二分查找算法。我反正是应了这句话,不过我不是计算机专家。
我们来看一个比较标准的二分查找算法

点击(此处)折叠或打开

  1. package new_test;


    public class BinarySearch {
    int arr[];
    public static void main(String args[]){
    test();
    }
    public int binarySearch(int t,int[] arr){
    int left=0;
    int right=arr.length;
    int middle;
    while(left middle=(left+right)/2;

    if(t==arr[middle]){
    return middle;
    }
    if(t>arr[middle]){
    left=middle+1;
    }
    if(t right=middle-1;
    }
    }
    return -1;

    }




    public static void test(){
    int[] arr=new int[]{1,2,5,7,8,10,11,15,19,20};
    System.out.println( new BinarySearch().binarySearch(8, arr));
    }
    }
运行结果是4,即arr[4]=8
其实这个算法还有一些值得思考的细节。比如求得两个数之和的平均数
如果直接写为middle=(left+right)/2就很可能出现数值溢出的情况。
可以使用下面的形式来避免,算法博大精深,细节决定成败。
middle=left+(right-left)/2;



目录
相关文章
|
存储 算法 搜索推荐
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
专攻软考高频算法,深度解析二分查找、堆排序、快速排序核心技巧,对比九大排序算法,配套动画与真题,7天掌握45%分值模块。
523 1
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
360 0
|
算法 Java 索引
算法系列之搜素算法-二分查找
二分查找是一种在`有序`数组中查找特定元素的算法。它的基本思想是通过将数组分成两半,逐步缩小查找范围,直到找到目标元素或确定目标元素不存在。
326 9
算法系列之搜素算法-二分查找
|
算法 索引
【算法】——二分查找合集
二分查找基础模版和进阶模版,查找元素位置,搜索插入位置,x的平方根,山脉数组的峰顶索引,寻找峰值,点名
|
算法 C# 索引
C#二分查找算法
C#二分查找算法
278 1
|
存储 算法 Java
深入算法基础二分查找数组
文章深入学习了二分查找算法的基础,通过实战例子详细解释了算法的逻辑流程,强调了确定合法搜索边界的重要性,并提供了Java语言的代码实现。
深入算法基础二分查找数组
|
存储 算法 C语言
【C语言】二分查找算法
【C语言】二分查找算法
372 0
|
算法
【算法】二分查找(整数二分和浮点数二分)
算法学习——二分查找(整数二分和浮点数二分)
489 0
【算法】二分查找(整数二分和浮点数二分)
|
消息中间件 存储 算法
一文搞懂二分查找算法!
一文搞懂二分查找算法!
792 0
|
算法 Java 索引
数据结构与算法学习十五:常用查找算法介绍,线性排序、二分查找(折半查找)算法、差值查找算法、斐波那契(黄金分割法)查找算法
四种常用的查找算法:顺序查找、二分查找(折半查找)、插值查找和斐波那契查找,并提供了Java语言的实现代码和测试结果。
681 0

热门文章

最新文章