首页 > 编程知识 正文

二分查找算法适用范围,设计一个二分查找的递归算法

时间:2023-05-05 12:39:48 阅读:55587 作者:3048

8.3二分搜索对一个有序数组进行二分搜索,{1、8、10、89、1000、1234},输入一个数,查看该数组中是否存在这个数,求下标,如果不存在,提示“没有这个数”

8.3.1二分搜索算法的思考

8.3.3二分查找的代码说明:添加了查找所有符合条件的元素的下标:

课后考题: {1、8、10、89、1000、1000、1234}如果在一个有序的数组中,有多个相同的数值,如何查找所有的数值? 例如这里1000

import java.util.ArrayList; import java.util.List;/* * @ author ZK * @ version1.0.0* @ classnamebinarysearch.jav a* @ description todo二分搜索* @createTime 2021年09月25日0733333 PPP inti=二进制搜索(arr,0,arr.length,101 ); system.out.println(I; int [ ] arr1={ 1,8,10,89,1000,1000,1234 }; listintegerlist=二进制搜索2 (arr 1,0,arr.length,1000 ); system.out.println (列表; } publicstaticintbinarysearch (int [ ] arr,int left,int right,intfindval(if ) leftright ) { return -1; (intmid=)左光线)/2; if(findval==arr[mid] ) { return mid; }elseif(findValarr[mid] ) returnbinarysearch ) arr,mid 1,right,findval ); }else{returnbinarysearch(arr,left,mid - 1,findVal ); }/**课后考题: {1、8、10、89、1000、1000、1234}一个有序的数组中,*如果有多个相同的数值,如何查找所有数值? 例如,如果找到这里的1000 * *构想分析*1.mid索引值,请不要立即返回。 将满足** 1000,的所有元素的下标添加到集合ArrayList * 3中。 向mid索引值的右边扫描,将满足1000,的所有元素的下标加入集合Arraylist * 4中。 将ArrayList恢复为*/publicstaticlistintegerbinarysearch2(int [ ] arr、int left、int right、int findVal ) ) if (int mid=) lefid if (find val==arr [ mid ] (listintegerlist=new ArrayList (; int temp=mid - 1; wile(true ) if ) temp0||arr[temp]!=findval({break; (list.add ) temp; 特普- -; (list.add ) mid; temp=mid 1; while(true ) if ) tempARR.Length-1|||arr[temp]!=findval({break; (list.add ) temp; 特普; }返回列表; }elseif(findValarr[mid] ) returnbinarysearch2) arr,mid 1,right,findval ); }else{returnbinarysearch2(ARR,left,mid - 1,findVal ); } }

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