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
}

}

运行结果:

相关推荐
雾月556 分钟前
LeetCode 1292 元素和小于等于阈值的正方形的最大边长
java·数据结构·算法·leetcode·职场和发展
hnlucky12 分钟前
redis 数据类型新手练习系列——Hash类型
数据库·redis·学习·哈希算法
Invinciblenuonuo20 分钟前
FreeRTOS学习笔记【10】-----任务上下文切换
笔记·学习
好奇龙猫22 分钟前
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(11): てあります。
学习
美味的大香蕉38 分钟前
Spark-SQL与Hive
笔记
_Hello_Panda_43 分钟前
FX10(CYUSB4014)USB3.2(10Gbps)开发笔记分享(1):硬件设计与开发环境搭建
笔记·fpga开发·fx10·cyusb4014
24k小善1 小时前
Flink TaskManager详解
java·大数据·flink·云计算
想不明白的过度思考者1 小时前
Java从入门到“放弃”(精通)之旅——JavaSE终篇(异常)
java·开发语言
2501_915373881 小时前
Node.js 学习入门指南
学习·node.js
.生产的驴2 小时前
SpringBoot 封装统一API返回格式对象 标准化开发 请求封装 统一格式处理
java·数据库·spring boot·后端·spring·eclipse·maven