当前位置: 首页 > 科技观察

毕业生必知求职算法,教你二分查找法

时间:2023-03-16 22:14:24 科技观察

1。二分查找法产生的背景。方式是循环遍历每个元素,直到找到你要找的元素。这种搜索方式效率很低。这时候就需要使用二分法来提高搜索效率。2.二分查找介绍。二分查找(halfsearch),查找指定值的位置。百度百科是这样介绍二分查找的:3.二分查找的算法思想假设数组是升序排列的。对于给定的数组的目标值目的是从数组的中间位置开始查找:1.如果查找到的数据恰好等于中间元素值,则返回中间元素值的索引;2、如果搜索值小于中间值,则使用整个搜索范围的前半部分作为新的搜索范围;3、如果搜索值大于中间值,则将整个搜索范围的后半部分作为新的搜索范围;注意:搜索成功返回索引,失败返回-14。代码实现4.1使用循环方式实现二分查找publicclassBinarySearch{publicstaticvoidmain(String[]args){//生成一个随机数组int[]array=suiji();//对随机数组进行排序Arrays.sort(array);System.out.println("生成的随机数组为:"+Arrays.toString(array));System.out.println("要查找的值:");Scannerinput=newScanner(System.in);//要查找的目标值intaim=input.nextInt();//用二元法查找intindex=binarySearch(array,aim);System.out.println("查找到的值的索引位置:"+index);}/***生成一个随机数组**@return返回值,返回一个随机数组*/privatestaticint[]suiji(){//random.nextInt(n)+m返回m和m+n-1之间的随机数intn=newRandom().nextInt(6)+5;int[]array=newint[n];//循环遍历赋值valuestothearrayfor(inti=0;iarray[mid]){left=mid+1;//如果搜索data恰好等于中间元素的值,放回中间元素值的Index}else{returnmid;}}return-1;}}代码执行结果:生成的随机数组为:[16,33,40,46,57,63,65,71,85]值:46查找值的索引位置:3如果找不到输入值,则返回-1生成的随机数组为:[28,41,47,56,70,81,85,88,95]待执行待查找的值:66待查找值的索引位置hed:-14.2使用递归实现二分查找publicclassBinarySearch2{publicstaticvoidmain(String[]args){//生成随机数组int[]array=suiji();//对数组进行随机排序Arrays.sort(array);System.out.println("生成的随机数组为:"+Arrays.toString(array));System.out.println("要查找的值:");Scannerinput=newScanner(System.in);//搜索的目标值intaim=input.nextInt();//使用二进制方法搜索intindex=binarySearch(array,aim,0,array.length-1);系统输出。println("查找到的值的索引位置:"+index);}/***生成一个随机数组**@return返回值,返回一个随机数组*/privatestaticint[]suiji(){//Random.nextInt(n)+m返回m和m+n-1之间的随机数intn=newRandom().nextInt(6)+5;int[]array=newint[n];//循环遍历赋值给数组for(inti=0;iarray[right]){return-1;}//求中间值intmid=(left+right)/2;if(array[mid]==aim){returnmid;}elseif(array[mid]>aim){//如果中间值大于你要找的值,则从左半边继续递归returnbinarySearch(array,aim,left,mid-1);}else{//如果中间的值小于你要找的值,则从右半边继续递归returnbinarySearch(array,aim,mid+1,array.length-1);}}}与循环相比,递归代码更简单,但耗费时间和空间,效率更高Low在实际学习和工作中,根据情况选择使用。