二分法查找:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

1. 思路:

        ①设置左右边界和target索引,左边界为0,右边界为数组长度-1,索引初始值为-1。

         ②因为不知道一共要找几次所以用while,当左边比右边大的时候循环结束

                 ③设置一个中间位置middle,让nums[middle]去和target进行比较,如果目标值小于中间值那么目标值就在中间值的左边,那么移动最右边的值,让最右边的值等于middle - 1,反之挪动最左边的值,让最左边的值等于middle + 1,如果目标值等于中间值那么证明找到了,并跳出循环,此时中间值就是要找的数的索引

                 ④返回index值,如果找到返回的数字应该是对应索引,如果没找到返回的数字应该为-1

 

2. 最终代码:

import java.util.Scanner;

public class zheBan {

    //返回值是int型
    public static int zheBan(int[] nums, int target) {
        //设置一个最左边的数
        int left = 0;

        //设置一个最右边的数
        //减一因为数组最大下标等于length-1
        int right = nums.length - 1;

        //设置找到target的索引,如果没找到为-1
        int index = -1;

        //因为不知道一共要找多少次所以用while循环
        //当最左边的数比最右边的数大时循环结束
        while (left <= right){

            //设置一个中间位置middle,让nums[middle]去和target进行比较
            int middle = (left + right) / 2;

            //如果目标值小于中间值那么目标值就在中间值的左边
            if (target < nums[middle]){
                //此时移动最右边的值,让最右边的值等于middle - 1
                right = middle - 1;
            }

            //如果目标值大于中间值那么目标值就在中间值的右边
            else if (target > nums[middle]){
                //此时挪动最左边的值,让最左边的值等于middle + 1
                left = middle + 1;
            }

            //如果目标值等于中间值那么证明找到了,并跳出循环
            else {
                //此时中间值就是要找的数的索引
                index = middle;
                break;
            }
        }

        //返回index值,如果找到返回的数字应该是对应索引,如果没找到返回的数字应该为-1
        return index;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //定义一个数组
        int[] nums = new int[6];
        //随机输入一个数组
        System.out.println("请输入nums:");
        for (int i = 0; i < nums.length; i++) {
            nums[i] = sc.nextInt();
        }

        //输入target
        System.out.println("请输入target");
        int target = sc.nextInt();

        //将nums和target传入,并创建index来接收
        int index = zheBan(nums,target);

        //输出最后结果,如果index不等于-1输出index, 如果index等于-1输出没找到
        if (index != -1){
            System.out.println(target + "应出现在第" + (index + 1)+ "的位置上");
        }
        else{
            System.out.println(target + "没有找到!");
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值