二分查找法

复制代码
public class Test {
    public static void main(String[] args) {
        int[]a={1,5,8,9,11,12,56,89};
        int i = binarySearch(a, 56);
        System.out.println(i);

    }

    /**
     * 又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置
       的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,
       则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。
     * @param arr
     * @param b
     * @return
     */
    public static int binarySearch(int[]arr,int b){
        if(null==arr || arr.length==0){
            return -1;
        }
        int leftIndex=0;//查找区间的左边索引
        int rightIndex=arr.length-1;//查找区间的右边索引
        int mid=0;//区间的中间索引
        while (leftIndex<=rightIndex){ //当左边的索引小于等于右边的索引时,可以继续取中间值
            mid=(leftIndex+rightIndex)/2;//中间索引值
            if(arr[mid]==b){ //如果中间索引所在的数据与需要查找的数据相等,则返回索引值
                return mid;
            }

            if(arr[mid]>b){//b在左
                rightIndex=mid-1;//如果需要查找的值在左边区间,则右边的索引要改为中间索引mid,又因为上一步知道arr[mid]!=b,所以要用mid-1作为右区间索引
            }else {
                leftIndex=mid+1; //b在右边,同理所以mid+1
            }
        }
        return -1;//找不到时
    }
}
复制代码

 

posted @   yangxiaohui227  阅读(115)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示