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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 893269222 中级黑马   /  2015-3-29 10:57  /  544 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

运行没有结果
class  Demo7_2
{
        public static void main(String[] args)
        {
                //折半查找
                int [] arr={1,5};
        int index=HalfSearch(arr,5);
                System.out.println("Index="+index);
        }
        public static int HalfSearch(int[] arr,int key)
        {
                int min,max,mid;
                min=0;
                max=arr.length-1;
                mid=(min+max)/2;
                do
                {
                        if (key<arr[mid])
                                 max=mid-1;
            else if (key>arr[mid])
                                min=mid+1;
                        mid=(min+max)/2;
                }
                while (key==arr[mid]);
                return  arr[mid];
        }
}

7 个回复

倒序浏览
你这个 返回的是5吧。。。不是应该返回脚标呢?
回复 使用道具 举报
  1. //有两个问题.
  2. public class Demo7_2 {
  3.         public static void main(String[] args) {
  4.                 // 折半查找
  5.                 int[] arr = { 1, 5 };
  6.                 int index = HalfSearch(arr, 5);
  7.                 System.out.println("Index=" + index);
  8.         }

  9.         public static int HalfSearch(int[] arr, int key) {
  10.                 int min, max, mid;
  11.                 min = 0;
  12.                 max = arr.length - 1;
  13.                 mid = (min + max) / 2;
  14.                 do {
  15.                         if (key < arr[mid])
  16.                                 max = mid - 1;
  17.                         else if (key > arr[mid])
  18.                                 min = mid + 1;
  19.                         mid = (min + max) / 2;
  20.                 } while (key == arr[mid]);//第一,这里的判断条件是key == arr[mid]   
  21.                                                                   //也就是当相等了就继续进去查找,不等就不管了....
  22.                
  23.                 return arr[mid];//第二,这里你返回的是arr[]数组中指数锁对应的值,也就是五,而你想要的是指数...
  24.         }
  25. }
复制代码
回复 使用道具 举报
else if (key>arr[mid])
                                 min=mid+1;
                         mid=(min+max)/2;
这句话有问题吧,max的值也应该变一下。
如果这个是do{}while();语句的话这个循环条件写的也有问题,因为只有当key==arr[mid]才会进循环吧。
回复 使用道具 举报

多谢,当时想到while语句和都do  while可以互换,就尝试一下,结果还是基础没学好,
回复 使用道具 举报
当时想到while语句和都do  while可以互换,就尝试一下,结果还是基础没学好,
回复 使用道具 举报
while()里面判断条件的Error
回复 使用道具 举报
  while (key==arr[mid]);  这个条件 你再仔细想想 你这个循环会执行几次
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马