算法 | 二分查找(BinarySearch)

本文介绍了二分查找算法,并针对可能出现的溢出问题提出了优化方案。通过改变求中间值的表达式,避免了大数相加导致的溢出。同时,详细讨论了在不同边界情况下如何调整循环条件,确保正确查找数组中的元素,防止越界异常。
摘要由CSDN通过智能技术生成

int mid = (left + right) / 2; //若left和right过大,则会存在两数相加超出数据限制的情况
int mid = left + (right - left) / 2; //改成这种写法,则会避免两个大数直接相加

/*当right = size - 1时
* 这里控制循环变为left<=right,因为right所代表的位置参与之中的计算。
* 向左边查找必须right=mid-1, 因为mid-1的位置可以访问到,mid的位置的元素已经比较过了。
* 使用left=mid+1,这里不使用left=mid是因为我们都已经将mid进行比较过了,不需要再参与运算了。
*/

/*当right = size时
* 这里控制循环的left<right可以取等号吗,答案是不可以,因为当相等的时候,找的要是数组的最后一个数组,就会发生数组越界异常。
* 向左边查找必须right=mid, 如果right=mid-1就会出现存在的元素可能会找不到,在赋值的时候自己可以试一试。
* 使用left=mid+1,这里不使用left=mid是因为我们都已经将mid进行比较过了,不需要再参与运算了。
*/

  • 二分查找
int BinarySearch(int arr[], int size, int target) {
   
    int left = 0;
    int right = size - 1;
    
    while (left <= right) {
   
        int mid = (left + right) 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值