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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唐学松 黑马帝   /  2012-9-21 16:21  /  1454 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 唐学松 于 2012-9-23 11:58 编辑

class zheban
{
        public static void main(String args[])
        {
                int [] arr={2,6,8,10,12,18,};
                int index=array(arr,10);
                System.out.println("index"+index);
                }
        public static int array(int[] arr,int key)
        {
        int min=0;
        int max=0;
        int mid=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])
                {min=mid-1 ;}
                }
                        return mid;
        }
}

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
      
        while (arr[mid]!=key)

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


评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 andychua 于 2012-9-21 17:09 编辑

class zheban
{
        public static void main(String args[])
        {
                int [] arr={2,6,8,10,12,18,};
                int index=array(arr,10);
                System.out.println("index="+index);
        }
        public static int array(int[] arr,int key)
        {
                 int min=0;
                 int max=arr.length-1;
                 int mid=(max+min)/2;
        
        while (arr[mid]!=key)
                        {                        
                         if (key>arr[mid])
                                {min=mid+1;}
                         else if (key<arr[mid])
                               {max=mid-1 ;}//这步注意了 应该是max而不是min
                         mid=(max+min)/2;//这步缺少了,用于计算下一次折半的中位数

                         /*下面这2步是用于判断折半排序的终止的,你之前的代码因为没有
                        这2个步骤,所以一直停留在while()循环当中*/

                         if(min>max)
                         return -1;

                        }
                return mid;
                }
}

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

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