比数组的遍历更快速的 ----折半寻找法

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 比数组的遍历更快速的 ----折半寻找法

1、折半查找又称为二分查找,是一种效率较高的查找方法。

2、折半查找的前提条件:
查找表中的所有记录是按关键字有序(升序或降序) 。
查找过程中,先确定待查找数字在表中的范围,然后逐步缩小范围(每次将待查记录所在区间缩小一半),直到找到或找不到记录为止。

3、查找的算法可以简述为以下:
用Low、High和Mid表示待查找区间的下界、上界和中间位置指针,初值为Low=1,High=n。
⑴ 取中间位置Mid:Mid=(Low+High)/2;
⑵ 比较中间位置记录的关键字与给定的K值:
① 相等: 查找成功;
② 大于:待查记录在区间的前半段,修改上界指针:High=Mid-1;
③ 小于:待查记录在区间的后半段,修改下界指针:Low=Mid+1;
直到越界(Low>High),查找失败
4.代码演示

public class Homework {
   
    static int []a = new int[5];//定义一个长度为5的一维数组
    static Scanner sr = new Scanner(System.in);//调用输入类Scanner
    public static void main(String[] args) {
   
        iniArray();//给数组赋值
        sortArray();//给数组排序
        int a = sr.nextInt();
        if(searchX(a)) {
   //判断结果
            System.out.println("True");
        }
        else System.out.println("false");
    }
    //给数组赋值
    public static void iniArray(){
   
        for (int i = 0; i <a.length ; i++) {
   
            a[i] = sr.nextInt();
        }
    }
    //给数组元素排序的代码
    public static void sortArray(){
   
        for (int i = 0; i < a.length-1; i++) {
   //最后一个不用再比较,已经是最小的了
            for (int j = 0; j < a.length-1-i; j++) {
   //每次与a[i]比较,前面已经排好序的不用再排所以要减i,减1是因为不用跟自己比
                if(a[j]>a[j+1]){
   
                    int b = a[j];
                    a[j] = a[j+1];
                    a[j+1] = a[j];
                }
            }
        }
    }
    //以下为折半寻找法的具体代码
    public static boolean searchX(int x){
   
            int low = 0,height = a.length-1,middle = (low+height)/2;//首先定义low,height,middle对数组元素进行索引
            while (low<=height){
                                      //循环结束的条件是左边索引值大于右边索引值
                if (x<a[middle]){
                                     //如果寻找的x值小于数组中间值,则右端的height左移到原先的middle的左边
                    height = middle-1;
                    middle = (low+height/2);                       //然后再更新middle值
                }
                else if(x>middle){
                                    //反之亦同
                    low = middle+1;
                    middle = (low+height)/2;
                }
                else return true;
            }
            return false;
        }
}

如有需改进的地方欢迎看官指出

相关文章
|
存储 关系型数据库 PostgreSQL
深入浅出PostgreSQL B-Tree索引结构
PostgreSQL 的B-Tree索引页分为几种类别 meta page root page # btpo_flags=2 branch page # btpo_flags=0 leaf page # btpo_flags=1 如果即
15462 0
|
6月前
|
API
微店商品详情API接口调用指南
本指南详解微店商品详情数据获取接口weidian.item.get,涵盖合规调用方式、核心参数(如item_id、sign)及返回字段(标题、价格、库存等),适用于电商分析与代购系统,确保数据准确稳定。
|
4月前
|
人工智能 安全 API
1949AI 轻量化 AI 自动化 本地自动化工具 + 浏览器自动化 + Agent 自动化工具 小说连载生成技术实践
1949AI 轻量化 AI 自动化 本地自动化工具 + 浏览器自动化 + Agent 自动化工具 小说连载生成技术实践
|
7月前
|
设计模式 人工智能 JavaScript
用Cursor重构烂代码的真实案例
上周三接手一个1200行“烂代码”JS文件,变量名混乱、逻辑嵌套深、功能混杂。借助AI工具Cursor分析坏味道、提取常量、拆解函数、重构条件判断,两天完成重构:代码从1200行拆为6个清晰模块,函数平均长度降至22行,嵌套从8层减至3层。加新功能不再胆战心惊。重构关键:先理解再动手,小步测试,善用AI辅助但不盲信。
|
7月前
|
存储 人工智能 JSON
Agent系统
大模型Agent是具备自主规划、推理、工具调用与记忆能力的智能系统,能分解任务、反思调整并持续交互。核心架构含大脑(LLM)、感知、行动与记忆模块,支持函数调用与多Agent协作,广泛应用于复杂任务场景,区别于传统Chatbot,更具主动性与执行力。
280 0
|
9月前
|
存储 数据采集 监控
基于淘宝商品详情 API 的数据分析应用:如何构建商品价格波动与库存监控系统?
构建基于淘宝商品详情API的商品价格波动与库存监控系统,需围绕数据采集、存储、分析、告警、可视化五大核心模块展开。以下是分步骤的详细方案,结合技术实现与业务逻辑,确保系统高效、稳定、可扩展。
|
12月前
|
机器学习/深度学习 SQL 运维
数据库出问题还靠猜?教你一招用机器学习优化运维,稳得一批!
数据库出问题还靠猜?教你一招用机器学习优化运维,稳得一批!
533 4