数据结构和算法(十八)二分查找

查找算法

常用的查找算法有:

  • 顺序(线性)查找
  • 二分查找(折半查找)
  • 插值查找
  • 斐波那契查找

1、二分查找算法

1.1 二分查找思路分析

二分查找的条件:

  • 查找的数量只能是一个,从指定一组数据中查找一个需要的数据
  • 二分查找用于查找的数据,逻辑上应该是有序的

因为数组时有序的,首先找到要查找的数组中间位置的下标

然后将要查找的数和 arr[mid] 数组中间位置的值进行比较

如果要找的数与中间数相等,就返回

如果要查找的数在中间数的左边,向左递归进行查找,在右边就向右递归进行查找

如果递归完整个数组仍未找到要找的数,结束递归退出

1.2 二分查找代码实现

给定一个数组内元素有序的数组,通过二分查找找到需要查找的数的位置,如果值存在返回下标,否则返回 -1

下面数组中所有元素是不重复的

public static void main(String[] args) {
    int[] arr = {1,3, 5, 32, 34, 234};
    int i = binarySearch(arr, 0, arr.length - 1, 34);
    System.out.println(i);
}

/**
     * 二分查找算法
     * @param arr   数组
     * @param left  左边的索引
     * @param right 右边的索引
     * @param finalVal  要查找的值
     * @return  找到返回下标,未找到返回 -1
     */
public static int binarySearch(int[] arr, int left, int right, int finalVal) {
    int mid = (left + right) / 2; // 找到中间位置 mid
    int midValue = arr[mid]; // 中间位置的值 midValue
    // 左边下标大于右边,返回 -1
    if (left > right) {
        return -1;
    }
    // 看要查找的值在中间位置值的左边还是右边,进行递归。如果中间值为要查找的值则返回
    if (finalVal > midValue) {
        return binarySearch(arr, mid + 1, right, finalVal);

    } else if (finalVal < midValue) {
        return binarySearch(arr, left, mid - 1, finalVal);
    } else {
        return mid;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一起来搬砖呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值