折半查找(二分查找)

本文详细介绍了二分查找算法,包括其基本思想及两种实现方式:非递归直接查找与递归查找。通过这两种方法,读者可以了解到如何在升序数组中高效地查找目标元素。

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

1. 算法思想

折半查找又叫二分查找,要求待查找的有序序列(比如数组)。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了返回为止,否则序列中没有待查的关键字。
这里写图片描述
这里写图片描述

2. 代码实现

/**
 * 详述: 二分查找法--非递归直接查找
 * 前提条件: 数组为升序数组
 * @param array
 * @param a
 * @return
 */
public static int BiSearch(int []array,int find){
    int low = 0;
    int high = array.length;
    int mid = 0;
    while(low < high){
        mid=low+((high-low)/2); //直接low+high有整型溢出的风险
        if(array[mid] == find){
            return mid + 1;
        }
        else if(array[mid] > find){
            high = mid - 1;
        }else if(array[mid] < find){
            low = mid + 1;
        }
    }   
    return -1;
}
/**
 * 详述: 二分查找法--递归查找
 * 前提条件: 数组为升序数组
 * @param array
 * @param find
 * @param low
 * @param high
 * @return
 */
public static int BiSearchRecursion(int []array, int find, int low, int high){
    int mid=low+((high-low)/2); //int mid = (low + high) / 2; 直接low+high有整型溢出的风险
    if(array[mid] == find){
        return mid+1;
    }else if(array[mid] > find){
        return BiSearchRecursion(array, find, low, mid-1);
    }else if(array[mid] < find){
        return BiSearchRecursion(array, find, mid+1, high);
    }
    return -1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值