二分查找错误在哪

二分查找错误在哪

package Demo1024;


class calculate{
 
}
public class math1 {
 public static void main(String[]args){
  int[]arr={1,2,3,4,5,6,7};
  doubleBanarySort(arr,4);
 }
 public static void  doubleBanarySort(int []arr, int x){
  int a=0;//数组首位
  int b=arr.length-1;//数组的末尾
  int  mid=(a+b)/2;//数组中值
  while(a<b){
   if(x==mid){
    System.out.println("找到了"+x);
          break;
          }
   else if(x<mid){
    b=mid;
   }else if(x>mid){
    a=mid;
   }
  }
  System.out.println("不存在该元素");
  
 }
 
}


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

中间值应该是: int mid = (arr[a] + arr[b]) / 2; 祝学习愉快~

  • J_Targaryen 提问者 #1
    非常感谢!
    2017-11-22 15:53:54

  效果: 利用二分法找到所在的区间数字,并且累计这个数字在区间内共有几个。老师,以下的代码可否优化???

----------------------------------------------------------------华丽的分割线----------------------------------------

package com.suanfa.test;


/**
 * 二分查找法
 * @author Lenovo
 *
 */
public class Demo7 {

    public static void main(String[] args) {
        //定义一个数组
        int[] arr = {2,1,4,6,6};
        doubleBanarySort(arr,6);
    }
    //二分法
    public static void doubleBanarySort(int[] arr,int x){
        int a=0;//数组首位
        int b=arr.length-1;//数组的末尾
        int mid;//数组中指
        int count=0;//几个数字出现了几次
         while(a<b){
             //中位数字
             mid =(a+b)/2;
             //如果输入的>arr[中位]
            if(x==arr[mid]){
                System.out.println("找到了");
                break;
            }else if(x<arr[mid]){ //如果输入的小于中位
                a=mid;
                //如果在这区间的话那么循环排一次,区间里面的数字,看是否存在
                for(int i=0;i<mid;i++){
                    if(x==arr[i]){
                        System.out.println("扎到了 "+arr[i]);
                        count++;
                    }
                }
                break;
            }else if(x>arr[mid]){
                for(int i=mid;i<arr.length;i++){
                    //如果在区间找到一样的数字
                    if(x==arr[i]){
                        System.out.println("扎到了 "+arr[i]);
                        count++;
                    }
                }
                break;
            }
            System.out.println("不存在该元素");
        }
        System.out.println("区间出现了几次一样的数字: "+count);
     }
}



  • 你完成的不错。祝学习愉快~
    2018-01-04 16:44:31
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师