[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(); ? (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |