A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

儿时往事

中级黑马

  • 黑马币:

  • 帖子:

  • 精华:

public class Demo {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
        int arr[]={1,12,13,45,56,84,98};
        int index=getchaban(arr, 84);
        System.out.println(index);
        }
        /*
        折半查找法:一个有序的数组,查找某一个数,利用角标确定性来查找
        三个记录角标的值分别是max最大  最小min   mid中间
        arr[]  对数组中的数进行循环判断,若判断的数大于mid   则min等于mid+1
        相反则max-1  再次进行折半  若max《min  输出-1               
                   定义一个函数,求取折半查找值
                有返回值。类型是int
                未知参数是一个数组,一个查找的数
           */
            public static int getchaban(int[] arr,int key)
                {
                  int max=arr.length;
                  int min=0;
                   int mid=(max+min)/2;
                  while(arr[mid]!=key)
                            {
                           if(arr[mid]<key)
                              min=mid+1;
                           else if(arr[mid]>key)
                                max=mid-1;

                                if(max<min)
                                return -1;
                        }
                                return mid;
                }


        }

1 个回复

倒序浏览
你的mid值在循环里面永远没有变化,所以循环条件一直成立,死循环
应该将mid = (max + min)/2  放到循环里面
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马