Java 学习和实践笔记(51):二分法查找(折半检索)

二分法查找(折半检索)又叫binary search.

要在一堆数据中查找是否存在某一个已知数,二分法查找的步骤:

第一步,对数据实现排序

第二步,将该数与排序后的数据集的中间一个数进行比较

第三步,如果该数等于这个中间数,那就找到了,返回位置索引。

如果该数大于这个中间数,那么再对右边的数进行对半查找。

如果该小于这个中间数,那么再对左边的数进行对半查找。

重复第三步,直到找到为止。

示例代码:

java 复制代码
import java.util.Arrays;

public class TestBinarySearch {
    public static void main(String[] args) {
        int[] arr ={1,3,5,7,9,11,10,8,6,4,2};//原始一维数组
        int searchWord = 8;//要查找的数
        Arrays.sort(arr);//先排序
        System.out.println("排序后的数据是"+Arrays.toString(arr));
        System.out.println(searchWord+"的索引位置是"+biSearch(arr,searchWord));
    }


public static int biSearch(int[] array, int value) {
    int low = 0;
    int high = array.length - 1;
    int i = 0;
    while (low <= high) {
        int middle = (low + high) / 2;
        i=i+1;
        System.out.println("第"+i+"次二分后,当前中间数是"+array[middle]);
        if (value == array[middle]) {
            return middle;
        }
        if (value > array[middle]) {
            low = middle + 1;
        }
        if (value < array[middle]) {
            high = middle - 1;
        }
    }
    return -1;//找不到返回-1
}

}

运行结果:

相关推荐
WooaiJava4 分钟前
流式TTS音频播放项目 - 面试问答(后端)
java·开发语言
奥升新能源平台5 分钟前
奥升充电|充电站用户分层分析与精细化运营策略研究
java·大数据·能源
梵得儿SHI18 分钟前
(第十篇)Spring AI 核心技术攻坚全梳理:企业级能力矩阵 + 四大技术栈攻坚 + 性能优化 Checklist + 实战项目预告
java·人工智能·spring·rag·企业级ai应用·springai技术体系·多模态和安全防护
一路向北⁢18 分钟前
Spring Boot 3 整合 SSE (Server-Sent Events) 企业级最佳实践(三)
java·spring boot·后端·sse
四谎真好看21 分钟前
JavaWeb学习笔记(Day13)
笔记·学习·学习笔记·javaweb
ZH154558913122 分钟前
Flutter for OpenHarmony Python学习助手实战:机器学习算法实现的实现
python·学习·flutter
摇滚侠43 分钟前
macbook shell 客户端推荐 Electerm macbook 版本下载链接
java·开发语言
程序员布吉岛44 分钟前
Java 后端定时任务怎么选:@Scheduled、Quartz 还是 XXL-Job?(对比 + 避坑 + 选型)
java·开发语言
知无不研1 小时前
lambda表达式的原理和由来
java·开发语言·c++·lambda表达式
逍遥德1 小时前
Sring事务详解之02.如何使用编程式事务?
java·服务器·数据库·后端·sql·spring