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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙百鑫 高级黑马   /  2013-3-7 20:15  /  1543 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class ArrayTest3 //折半查找
{
        public static void main(String[] args)
        {
                int[] arr=new int[]{1,3,4,6,7,9};
                int x=haflSearch(arr,7);
                System.out.println("x="+x);
        }
        public static int haflSearch(int[] arr,int dey)//定义的一个函数用来查找
        {
                int min,max,mid;
                min=0;
                max=arr.length-1;
                mid=(min+max)/2;

                while(dey!=arr[mid])
                {
                        if(dey>arr[mid])
                                min=mid+1;
                        else if(dey<arr[mid])
                                max=mid-1;
                       
                        if(min>max)
                                return -1;

                        mid=(max+min)/2;

                }
                return min;
        }
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 鼓励鼓励

查看全部评分

6 个回复

倒序浏览
为什么我查找7的时候返回的是   3呀    查找9的时候返回的就是5了。。。。。。这是为什么呀???????????????
回复 使用道具 举报
最后应该是return mid
回复 使用道具 举报
张学林 发表于 2013-3-7 20:28
最后应该是return mid

OK  谢谢啦
回复 使用道具 举报
张学林 发表于 2013-3-7 20:28
最后应该是return mid

OK  谢谢啦
回复 使用道具 举报
你是没有了解折半查打,int[] arr=new int[]{1,3,4,6,7,9};  第一次arr.length/2,arr角标是3,那arr[3]=4;4<7; 第二次6、7、9就是3/2 =1,也就是6,6《7,第三次7,9,2/2=1,也就是7=7,找到了,3次就找到了所以是3,查9就一样

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 画图是否更清晰些呢?加油

查看全部评分

回复 使用道具 举报
一个电话聊了一个小时,回帖完了

说明一下我的解释吧:

你的代码的问题出在 wihle循环了
如果wihle循环条件不成立,说明 dey=arr[mid]
这个都等于它了,你返回的是什么?

这种问题,都不应该执行代码就能发现的问题。



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