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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张红伟 中级黑马   /  2013-10-3 01:00  /  1486 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


public class arrDemo{

public static int halfselect(int[] arr,int key){
         int min,max,mid;
         min=0;
         max=arr.length-1;
         mid=(min+max)/2;
         
                 while(key!=arr[mid]){
                         if(key<arr[mid])
                                 min=min+1;
                         else if(key>arr[mid])
                                 max=max-1;
                         if(arr[min]>arr[max])
                                 return -1;
                 }
                 return mid;
         }
   public static void main(String[] args){
           int[] x={1,2,3,4,5,35};
           int y=5;
           halfselect(x,y);
}

}

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

3 个回复

倒序浏览


  1. public class arrDemo{

  2. public static int halfselect(int[] arr,int key)
  3. {
  4.          int min,max,mid;
  5.          min=0;
  6.          max=arr.length-1;
  7.          mid=(min+max)/2;
  8.          
  9.                  while(key!=arr[mid])
  10.                  {
  11.                          System.out.println("AAAAAAAAAAAAA" + max + mid + min);
  12.                          if(key<arr[mid])  // 这个条件没有成立 , 所以min永远都是0
  13.                                  min=min+1;
  14.                          else if(key>arr[mid])
  15.                                  max=max-1;   // 循环5次后max就变成了-1,
  16.                          if(arr[min]>arr[max])  //因为min为0,所以这个条件也不可能成立,max = -1  arr[-1] 抛异常了 ,
  17.                                                         return -1;
  18.                  }
  19.                              
  20.                  return mid;
  21.          }
  22.    public static void main(String[] args)
  23.    {
  24.            int[] x={1,2,3,4,5,35};
  25.            int y=5;
  26.            halfselect(x,y);
  27.         }

  28. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
public static int halfselect(int[] arr,int key){
         int min,max,mid;
         min=0;
         max=arr.length-1;
         mid=(min+max)/2;
         
                 while(key!=arr[mid]){
                         if(key<arr[mid])
                               max=mid-1;    //min=min+1; 这里有个判断上的错误
                         else if(key>arr[mid])
                               min=mid+1;    //max=max-1;
                         mid=(max+min)>>1;   //这里没有进行折半
                          if(min>max)   //if(arr[min]>arr[max])  //这里应该写成坐标的比较,而不是坐标对应的值的比较,防止一些特殊情况的数组,如都是同一个数组成的数组,如果使用值比较,会出现角标越界
                                 return -1;
                 }
                 return mid;
         }

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
问题解决后,请修改帖子分类为:提问结束
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马