首页 > 编程知识 正文

java二分查找算法代码,java算法有哪些

时间:2023-05-03 13:21:12 阅读:128900 作者:776

java实现二分搜索的算法

二分查找又称折半搜索,是一种简单快速的搜索算法。 要搜索的数组有两个要求。一是此数组必须有规律。 也就是说,数组中的所有元素都按大小关系排序,可以是升序或降序。 在本文档中,假设按升序排序。 (二是此数组必须按顺序存储。

二分查找算法的原理如下:

如果等待检查序列为空,则返回-1,退出算法。 这意味着找不到目标元素。

如果要检查的序列不为空,请将中间元素与要搜索的目标元素匹配,以验证它们是否相等。

如果等于,则返回中间元素的索引并退出算法。 此时搜索成功。

如果不相等,则比较这两个元素的大小。

如果此中间元素大于目标元素,则将当前序列的前一半作为新的等待检查序列,因为后一半的所有元素都大于目标元素,并且它们都被排除。

如果中间元素小于目标元素,则将当前序列的后半部分作为新的等待检查序列,因为前半部分的所有元素都小于目标元素,并且所有元素都被排除。

用新的等待检查序列重新开始步骤1的工作。

二分搜索之所以快,是因为匹配不成功时,可以每次排除剩下的要素中的一半要素。 因此,包含目标元素的有效范围会迅速缩小,而不是像顺序搜索那样一次只排除一个元素。

java代码实现

//二分搜索算法(使用二分搜索必须是规则数组) publicclassbinarysearch publicstaticvoidmain (string ) args )//int ) arr={ //if (结果!=-1 ) ({//System.out.printf ('此数量的下标为%d ',result ); //}else{//System.out.println ('找不到此数据); //} int[] arr={-10,- 1,5,10,10,10,10,10,32,56 }; arraylistintegerresindexlist=二进制搜索2 (arr,0,arr.length-1,10 ); if(resindexlist.size )!=0) { System.out.println (此数量的下标为' resIndexList ' ); } else { System.out.println ('未找到此数量。' ); } } /** * @param arr检索对象数组* @param left数组的左边从哪里找到* @param right数组的右边* @param findval检索对象值* @return就返回对应的数组下标,或者publicstaticintbinarysearch (int [ ] arr,int left,int right,int findval ) ) int mid=(left right )/2; int find=arr[mid]; 左光线(if ) {返回- 1; //递归法//while(left=right )//if (findvalfind ) {//right=mid-1; //mid=(左光线)/2; //find=arr[mid]; //elseif(findvalfind ) {//left=mid 1; //mid=(左光线)/2; //find=arr[mid]; //}else {//return mid; //}//}//return -1; //递归法利用if(findvalfind ) returnbinarysearch ) arr、left、mid - 1、findval ); }elseif(findvalfind ) returnbinarysearch ) arr,mid 1,right,findval ); else {返回mid; (//二分搜索的扩展,如果有相同的要素,作为其后缀的publicstaticarraylistintegerbinarysearch2(int [ ] arr,int left,int right,int findval ) ) if (左光线) {返回新阵列}; }if(findvalfind ) returnbinarysearch2) arr、left、mid - 1、findval ); }elseif(findvalfind ) returnbinarysearch2) arr,mid 1,right,findval ); } else { arraylistintegerreslist=new ArrayList (; int temp=mid - 1; wile(true ) if ) temp0||arr[temp]!=findval({break; }reslist.add(temp; temp -=1; (reslist.add ) mid; temp=mid 1; wile(true ) if ) tempright|||arr[temp]!=findval({break; }reslist.add(temp; 时间=1; }返回列表; } }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。