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
}

}

运行结果:

相关推荐
wszy180916 小时前
新文章标签:让用户一眼发现最新内容
java·python·harmonyos
wszy180916 小时前
顶部标题栏的设计与实现:让用户知道自己在哪
java·python·react native·harmonyos
程序员小假17 小时前
我们来说一下无锁队列 Disruptor 的原理
java·后端
clorisqqq17 小时前
人工智能现代方法笔记 第1章 绪论(1/2)
人工智能·笔记
charlie11451419117 小时前
嵌入式现代C++教程: 构造函数优化:初始化列表 vs 成员赋值
开发语言·c++·笔记·学习·嵌入式·现代c++
资生算法程序员_畅想家_剑魔17 小时前
Kotlin常见技术分享-02-相对于Java 的核心优势-协程
java·开发语言·kotlin
ProgramHan17 小时前
Spring Boot 3.2 新特性:虚拟线程的落地实践
java·jvm·spring boot
IT=>小脑虎18 小时前
C++零基础衔接进阶知识点【详解版】
开发语言·c++·学习
#眼镜&18 小时前
嵌入式学习之路2
学习
nbsaas-boot18 小时前
Go vs Java 的三阶段切换路线图
java·开发语言·golang