Java算法之二分查找算法

本文详细介绍了二分查找算法的原理与实现方法,并通过Java代码示例展示了如何在一个有序数组中查找特定元素。该算法利用了数据有序的特点,通过不断缩小查找范围,实现了高效的搜索过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java算法之二分查找算法

二分查找算法概述

折半查找又叫二分法查找,在一个查找区间中,确定出查找区间的中心位置,用待查找数据元素的关键字与中心位置上的数据元素的关键字比较,若两者相等,则查找成功;否则,若前者小于后者,则把查找区间定为原查找区间的前半段继续这样的过程;否则,则把查找区间的后半段继续这样的过程。

二分查找算法思想

二分查找算法是建立在有序数组基础上的。算法思想为:
1. 查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则查找过程结束;
2. 如果某一待查找元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟第1点一样从中间元素开始继续进行查找。
3. 如果在某一步骤数组为空,则代表找不到。

二分查找算法原理

采用二分法查找时,数据需是排好序的。基本思想:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。

二分查找算法源码

二分查找有while循环和递归查找两种,源码使用循环查找数组中数据。

package com.algorithm;

/**
 * 二分查找
 * @author Administrator
 *
 */
public class BinarySearch {

    public static int binarySearch(int[] dataset ,int data) { 
        int beginIndex = 0;                 //定义起始位置
        int endIndex = dataset.length - 1;  //定义结束位置,数组下标
        int midIndex = -1;                  //定义中点
        if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex){ 
            return -1; //用二分法查找的数据必须是排好序的,因此只要比较第一个元素和最后一个元素就可以确定所查找的数据是否在数组中   
        } 
        while(beginIndex <= endIndex) { 
            midIndex = (beginIndex+endIndex)/2;//初始化中点 
            if(data <dataset[midIndex]) { 
                endIndex = midIndex-1; //如果查找的数据小于中点位置的数据,则把查找的结束位置定义在中点
            } else if(data>dataset[midIndex]) { //如果查找的数据小于中点位置的数据,则把查找的起始位置定义在中点
                beginIndex = midIndex+1; 
            }else { 
                return midIndex; //返回查找到的数据的位置
            } 
        } 
        return -1; 
    } 
    public static void main(String[] args) {
        int[] test1 = { 38,48,59,61,72,99,101 }; // 测试数组
        System.out.print("你查找的数据在数组中下标是:"+ BinarySearch.binarySearch(test1,59));
    }
}

算法效果:

你查找的数据在数组中下标是:2

总结

二分查找法的时间复杂度为O(log n),比较简单。也是面试中常考的一个知识点。
推荐博客:
二分查找各种情况大总结 :二分查找算法不同场景的整理、
二分查找专题:面试中常见的二分查找算法整理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值