2020.7.31二分查找

01_二分查找

binarySearch

public static int binarySearch(int[] a,
                               int fromIndex,
                               int toIndex,
                               int key)
使用二分搜索法来搜索指定的 int 型数组的范围,以获得指定的值。必须在进行此调用之前对范围进行排序(通过 sort(int[], int, 
int) 方法)。如果没有对范围进行排序,则结果是不确定的。如果范围包含多个带有指定值的元素,则无法保证找到的是哪一个。

参数:
a - 要搜索的数组
fromIndex - 要搜索的第一个元素的索引(包括)
toIndex - 要搜索的最后一个元素的索引(不包括)
key - 要搜索的值 
返回:
如果它包含在数组的指定范围内,则返回搜索键的索引;否则返回 (-(插入点) - 1)。插入点 
被定义为将键插入数组的那一点:即范围中第一个大于此键的元素索引,如果范围中的所有元素都小于指定的键,则为 
toIndex。注意,这保证了当且仅当此键被找到时,返回的值将 >= 0。 
抛出: 
IllegalArgumentException 

如果 fromIndex > toIndex 
ArrayIndexOutOfBoundsException 

如果 fromIndex < 0 或 toIndex > a.length

方法过程

package MidLocaltTest;

import java.util.Arrays;

//二分查找:元素必须是有序的
public class LocaltTest {

    public static void main(String[] args) {
        int[] arr = {20, 20, 6, 8, 9, 1, 2, 3, 4, 90, 100, 3, 0, -1, -2, 6, 9};
        Arrays.sort(arr);//排序数组
        System.out.println(Arrays.toString(arr));//[-2, -1, 0, 1, 2, 3, 3, 4, 6, 6, 8, 9, 9, 20, 20, 90, 100]
        int index = LocaltTest.binarySearch(arr,0,arr.length ,4);
        System.out.println(index);
    }
    //定义一个查找方法
    private static int binarySearch(int[] arr,int fromIndex, int toIndex,int key){
        int low=fromIndex;
        int length=toIndex - 1;
        while(low<=length){
            int midIndex=(low+length) >>> 1;//取出数组的中间索引;
            int mid=arr[midIndex];//取出中间值
            if(mid>key){//中间值大于传入的值
                length=midIndex-1;
            }
            else if(mid<key){
                low=midIndex +1;
            }else{
                return midIndex;//返回会中间值
            }
        }
        return -(low-1);//找不到就返回比key大的元素索引-1;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

有点。

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

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

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

打赏作者

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

抵扣说明:

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

余额充值