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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵方明 中级黑马   /  2012-5-12 11:04  /  1928 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 赵方明 于 2012-5-14 16:02 编辑

class  ArrayTest5
{
        public static void main(String[] args)
        {
                int [] arr={1,12,5,8,12,90};
                int index=getIndex(arr,20);
                System.out.println("index="+index);
        }
        
        public static int halfSearch(int [] arr,int key)
        {
                int min,max,mid;
                min =0;
                max =arr.length-1;
                mid=(max+min)/2;
                while (arr[mid]!=key)
                {
                        if(key>arr[mid])
                                min =mid+1;
                        else (key<arr[mid])
                                max=mid-1;
                        mid=(max+min)/2;
                }
                return mid;
        }

        public static int getIndex(int [] arr, int key)
        {
                for (int x=0;x<arr.length;x++ )
                {
                        if (arr[x]=key)
                        return x;

                }
                return -1;
        }
}
折半查找,我看完了自己写怎么就运行不了?

8 个回复

正序浏览
呵呵呵,不好意思   
"因为不存在 arr[mid]!=key  这个条件为 false 的 " 所以你还得在后面加一句 if(min>max) return -1;//返回 -1 代表没找着
这句话说错了  应该是:  一直存在着 arr[mid]!=key  这个条件  所以 while (arr[mid]!=key) 一直为 true  所以一直死循环

   
回复 使用道具 举报
嗯  你的思想是没错的,应该是毕老师的那个视频你跳过去了,这里说了的,我给你说下吧,你想过没 ,如果你要找的数 在数组中不存在  ,那这个循环是不是一直在运行呢

  1. while (arr[mid]!=key)
  2.                 {
  3.                         if(key>arr[mid])
  4.                                 min =mid+1;
  5.                         else (key<arr[mid])
  6.                                 max=mid-1;
  7.                         mid=(max+min)/2;
  8.                 }
复制代码
因为不存在 arr[mid]!=key  这个条件为 false 的  所以你还得在后面加一句 if(min>max) return -1;//返回 -1 代表没找着

  1. while (arr[mid]!=key)
  2.                 {
  3.                         if(key>arr[mid])
  4.                                 min =mid+1;
  5.                         else (key<arr[mid])
  6.                                 max=mid-1;
  7.                         mid=(max+min)/2;
  8.                         if(min>max) return -1;//返回 -1 代表没找着

  9.                 }
复制代码

评分

参与人数 1技术分 +1 收起 理由
职业规划-刘倩老师 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  public static void main(String[] args)
      {
               int [] arr={1,12,5,8,12,90};
               int index=getIndex(arr,20);
               System.out.println("index="+index);
       }
      
       public static int halfSearch(int [] arr,int key)
       {
               int min,max,mid;
               min =0;
               max =arr.length-1;
               mid=(max+min)/2;
               while (arr[mid]!=key)
               {
                       if(key>arr[mid])
                               min =mid+1;
                       else if(key<arr[mid])
                               max=mid-1;
                       mid=(max+min)/2;
               }
               return mid;
       }

      public static int getIndex(int [] arr, int key)
       {
               for (int x=0;x<arr.length;x++ )
               {
                       if (arr[x]==key)
                       return x;

              }
               return -1;
       }
回复 使用道具 举报
class  ArrayTest5
{
         public static void main(String[] args)
        {
                 int [] arr={1,12,5,8,12,90};
                 int index=getIndex(arr,20);
                 System.out.println("index="+index);
         }
         
         public static int halfSearch(int [] arr,int key)
         {
                 int min,max,mid;
                 min =0;
                 max =arr.length-1;
                 mid=(max+min)/2;
                 while (arr[mid]!=key)
                 {
                         if(key>arr[mid])
                                 min =mid+1;
                         else (key<arr[mid])//少了个if
                                 max=mid-1;
                         mid=(max+min)/2;
                 }
                 return mid;
         }

        public static int getIndex(int [] arr, int key)
         {
                 for (int x=0;x<arr.length;x++ )
                 {
                         if (arr[x]=key)
                         return x;

                }
                 return -1;
         }
}
回复 使用道具 举报
本帖最后由 王渠 于 2012-5-12 11:20 编辑
  1.         public static void main(String[] args)
  2.         {
  3.                 int [] arr={1,12,5,8,12,90};
  4.                 int index=getIndex(arr,20);
  5.                 System.out.println("index="+index);
  6.         }
  7.         
  8.         public static int halfSearch(int [] arr,int key)
  9.         {
  10.                 int min,max,mid;
  11.                 min =0;
  12.                 max =arr.length-1;
  13.                 mid=(max+min)/2;
  14.                 while (arr[mid]!=key)
  15.                 {
  16.                         if(key>arr[mid])
  17.                                 min =mid+1;
  18.                         else (key<arr[mid])//你这里之判断了两种情况,如果确定没有==情况,那么就直接用else后面不接判断语句,或者用else if(key<arr[mid])</span>
  19.                                 max=mid-1;
  20.                         mid=(max+min)/2;
  21.                 }
  22.                 return mid;
  23.         }

  24.         public static int getIndex(int [] arr, int key)
  25.         {
  26.                 for (int x=0;x<arr.length;x++ )
  27.                 {
  28.                         if (arr[x]=key)//boolean 表达式应该用==
  29.                         return x;

  30.                 }
  31.                 return -1;
  32.         }
  33. }
复制代码
回复 使用道具 举报
本帖最后由 魏涞 于 2012-5-12 11:18 编辑

class  ArrayTest5
{
         public static void main(String[] args)
        {
                 int [] arr={1,12,5,8,12,90}; //顺便说一句,折半查找是对有序数组进行查找的,你这里的数组是无序的
                 int index=getIndex(arr,20);
                 System.out.println("index="+index);
         }
         
         public static int halfSearch(int [] arr,int key)
         {
                 int min,max,mid;
                 min =0;
                 max =arr.length-1;
                 mid=(max+min)/2;
                 while (arr[mid]!=key)
                 {
                         if(key>arr[mid])
                                 min =mid+1;
                         else (key<arr[mid])  //这里是语法错误,else是不带条件判断的,要用的话,应该改为else if(),这里可以不用判断,直接else max=mid-1;
                                 max=mid-1;
                         mid=(max+min)/2;
                 }
                 return mid;
         }

        public static int getIndex(int [] arr, int key)
         {
                 for (int x=0;x<arr.length;x++ )
                 {
                         if (arr[x]=key) //这里写错了,应该是arr[x]==key
                         return x;

                }
                 return -1;
         }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马