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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 忘记了 中级黑马   /  2013-11-23 23:46  /  1233 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 忘记了 于 2013-11-24 01:25 编辑

public class halfSearch {
        public static void main(String[] args)
        {
                int[] arr = {1,2,3,4,5,6,7,};
                int index1 = halfSearch_1(arr,4);
                int index2 = halfSearch_2(arr,7);
                System.out.println("index1="+index1);
                System.out.println("index2="+index2);
        }
        public static int halfSearch_1(int[] arr,int key)
        {
                int min,max,mid;
                min=0;
                max=arr.length-1;
                mid=min+max/2;
               
                while(arr[min]!=key)
                {
                        if(key>arr[mid])
                        min=mid+1;
                        
                        else if(key<arr[mid])
                        max=mid-1;

                        mid=(max+min)/2;

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


        public static int halfSearch_2(int arr[],int key)
        {
                int min,max,mid;
                min=0;
                max=arr.length-1;

                while(min<=max)
                {
                        mid=(min+max)/2;
                        if(key>arr[mid])
                        min=mid+1;
                        else if(key<arr[mid])
                        max=mid-1;
                        else
                        return mid;        
                }
                return -1;
        }
        
}

//运行完了没看见输出??

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 代码可以放代码框里的哦~~加油加油!!!.

查看全部评分

3 个回复

倒序浏览
你的代码里面halfSearch_1中的while条件不对。应该是(arr[mid]!=key),不能是key与最小脚标的值比。应该是key与中间脚标的值进行比较。可能是你抄错了吧。还有就是,提醒你一下,即使是if和else if 里面是单行代码也最好用大括号括起来。修改后的代码如下
  1. public static int halfSearch_1(int[] arr,int key)
  2. {
  3.                  int min,max,mid;
  4.                  min=0;
  5.                  max=arr.length-1;
  6.                  mid=min+max/2;
  7.                  
  8.                  while(arr[mid]!=key)
  9.                  {
  10.                          if(key>arr[mid])
  11.                          min=mid+1;
  12.                         
  13.                          else if(key<arr[mid])
  14.                          max=mid-1;

  15.                          mid=(max+min)/2;

  16.                          if(min>max)
  17.                                  return -1;
  18.                  }
  19.                  return mid;
  20.          }
复制代码
回复 使用道具 举报
求科普~怎么弄代码框啊~
回复 使用道具 举报
你这个不是二分查找吗?
public static int halfSearch_1(int[] arr,int key)
        {
                int min,max,mid;
                min = 0;
                max = arr.length-1;
                while(min<=max)
                {
                        //获取中间角标。
                        mid = (max+min)/2;

                        //获取中间角标上的元素和key进行比较。
                        if(key>arr[mid])
                                min = mid + 1;
                        else if(key<arr[mid])
                                max = mid - 1;
                        else
                                return mid;
                }
                return -1;
        }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马