加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

[javaSE] 数组(查找-二分查找)

发布时间:2021-05-21 06:44:08 所属栏目:大数据 来源: https://www.jb51.cc
导读:前提数组必须是有序的 ? 定义最小,最大,中间的角标索引 int min,max,mid; min =0 ; max =arr.length-1 ; mid =(min+max)/2; ? 上面的索引需要变化,使用循环,条件:当中间值不等于目标值时 ; mid =(min+max)/2 ; while (arr[mid]!= key){ if (key arr[mid

前提数组必须是有序的

?

定义最小,最大,中间的角标索引

        int min,max,mid;
        min=0;
        max=arr.length-1;
        mid=(min+max)/2;

?

上面的索引需要变化,使用循环,条件:当中间值不等于目标值时

        ;
        mid=(min+max)/2;
        while(arr[mid]!=key){
            if(key<arr[mid]){
                
            }else if(arr[mid]<key){
                
            }
        }

?

当中间值大于目标值时,最大角标移动到中间角标-1位置

当中间值小于目标值时,最小角标移动到中间角标+1位置

中间角标继续二分

        arr[mid]){
                max=mid-1;
            }key){
                min=mid+1;
            }
            mid=(min+max)/2;
        }
        return mid;

?

?

此时的代码有问题,当找不到目标时,会陷入死循环,加一个判断

如果一直找不到,最小角标和最大角标会错位

        ;
            }
            if(min>max) return -1;
            mid=(min+max)/2return mid;

java版:

public class ArrayDemo {

    /**
     * @param args
     */
    static void main(String[] args) {
        int[] arr=new int[]{1,4,6,7,8,9};
        System.out.println("索引:"+keySearch(arr,7));//索引:3
        System.out.println("索引:"+helfSearch(arr,1)">索引:3
    }
    
     * 二分查找
     *  arr
     *  key
     * @return
     int helfSearch(int[] arr, key){
        return mid;
    }
    
     * 获取该值在数组中第一次出现的位置
     *  num
     * int keySearch( num){
        for(int i=0;i<arr.length;i++){
            if(arr[i]==num){
                 i;
            }
        }
        ;
    }
}

PHP版:

<?PHP
 ArrayDemo{
    function main(){
        $arr=array(1,1)">);
        echo "索引:".ArrayDemo::keySearch($arr,7);索引:3
        echo "索引:".ArrayDemo::helfSearch(/**
     * 二分查找
     * @param arr
     * @param key
     * @return
     function helfSearch($key){
        $min=0;
        $max=count($arr)-1$mid=ceil(($min+$max)/2while($arr[$mid]!=if($key<$mid]){
                $max=$mid-1$mid]<){
                $min=$mid+1;
            }
            );
            $min>$max) return ;
    }
    *
     * 获取该值在数组中第一次出现的位置
     * @param arr
     * @param num
     * @return
     function keySearch(){
        for($i=0;$i<$arr);$i++$i]==){
                $i;
            }
        }
        ;
    }
}

ArrayDemo::main();

?

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读