常见对象(数组高级二分查找)

/*
 * 查找:
 *         基本查找:数组元素无序(从头找到尾)
 *         二分查找(折半查找):数组元素有序
 * 

 * 分析:
 *         A:定义最大索引,最小索引
 *         B:计算出中间索引
 *         C:拿中间索引的值和要查找的值进行比较
 *             相等:就返回当前的中间索引
 *             不相等:
 *                 大    左边找
 *                 小    右边找
 *         D:重新计算出中间索引
 *             大    左边找
 *                 max = mid - 1;
 *             小    右边找
 *                 min = mid + 1;
 *         E:回到B

直接查找---查找的数组中的数是无序的

package day13;

public class LX4 {
    public static void main(String[] args) {
        //定义一个数组
        int [] arr ={23,12,45,67,54,98};
        //调用基础查找
        int A = show(arr,98);
        System.out.println(A);
    }
    //查找数组中的指定元素的索引--基础查找
    //两个明确--返回值类型--int--参数列表--int[]arr-int value
    public static int show(int []arr,int value){
        for (int x=0;x< arr.length;x++){
            if(arr[x]==value){
                //如果索引处的值等于元素--则返回该处的索引
                return x;
            }
        }
        //进行判断--如果数组中没有该元素--则返回的是-1
        return -1;
    }
}

折半查找:----查找的数组中的数是顺序排列的数

    public class ZheBanChaZhao {
    public static void main(String[] args) {
        //给出一个有规律的数组
        int [] arr = {11,22,33,44,55,66,77,88,99,8888,888,66};
        //调用折半查找的功能
        int A = show(arr,9999);
        System.out.println(A);
        
    }
    //明确两个需求---返回值类型--int---参数列表---int[]arr--int value(传入要查找的元素)
    public  static int show(int [] arr,int value) {
        定义一个最大索引和最小索引
        int max = arr.length - 1;
        int min = 0;

        //找出中间索引量--进行第一次判断查找
        int mid = (min + max) / 2;
        //运行次数不明确采用while循环进行
        //如果索引值的元素不等于要查找的元素则进入循环体内--如果相等--则直接return返回mid索引值
        while (arr[mid] != value) {
            //中间索引值的元素不等于要查找的元素
            //进入判断---与查找到元素值谁大谁小的判断
            //如果中间索引值的元素大于要查找的元素--则进入下边这个循环
            if (arr[mid] > value) {
                //此时的中间索引值的元素大于要查找的元素
                //进行向左的折半查找==此时的最大元素为原来的mid-1---最小元素不变
                max=mid-1;
            } else if (arr[mid] < value) {
                //此时的中间索引值的元素小于要查找的元素
                //进行向右的折半查找==此时的最小元素为原来的mid+1最大元素不变
                min=mid+1;
            }
            //加入判断
            //如果最小值大于最大值说明整个数组元素并遍历完毕--则说明数组中没有查找的此元素
            if(min>max){
               // 返回值返回-1;
               return -1;
            }
            //进行if判断后再次改变mid的值
            mid =(max+min)/2;
        }
        //mid索引位置上的元素与要查找的元素相等---则return返回mid
        return mid;
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值