二分查找(Java实现)

本文详细介绍了二分查找的基本思想,其在有序序列中的应用,包括特点如待查找有序性、搜索过程和空间复杂度。还提供了Java实现代码,并探讨了其时间复杂度O(logn)和查找顺序。

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

二分查找

基本思想

假设序列是有序(升序)的,将序列中的中间位置的元素与关键字进行比较。如果相等则查找成功,否则利用中间位置记录将表分成前后两个子序列,当中间元素大于关键字时,则将前一个子序列的中间位置元素与关键字进行比较,相反将后一个子序列的中间位置的元素与关键字进行比较。重复以上步骤直到查找成功,或查找失败。

特点

  1. 待查找序列必须是有序;
  2. 从中间元素开始;
  3. 利用中间位置记录将表分成前、后两个子序列(除非已经找到);
  4. 如果中间位置记录的元素大于关键字,则进一步查找前一子序列,否则进一步查找后一子序列。

缺点

待查找序列必须是有序的

性能分析

时间复杂度:O(logn)
空间复杂度:O(1)

Java实现

public class BinarySearch {
    public static void main(String[] args) {
        int[] array = {10, 11, 12, 16, 18, 23, 29, 33, 48, 54, 57, 68, 77, 84, 98};
        int key = 23; //关键字
        int mid = binarySearch(array, key);
        System.out.println("目标数字的所在的数组下标为:" + mid);
    }

    // 二分查找
    public static int binarySearch(int[] array, int key) {
        int left = 0; //指向数组的首位
        int right = array.length - 1; //指向数组的末尾

        while (left <= right) {
            int mid = (right + left) / 2; //中间位置

            //使用key与mid进行比较
            if (key == array[mid]) {
                return mid;
            } else if (key > array[mid]) {
                left = mid + 1;
            } else if (key < array[mid]){
                right = mid - 1;
            }
        }
        return -1;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值