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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qq8921310 高级黑马   /  2014-10-25 00:38  /  1789 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public static  int halfSearch(List<String> list,String key)
{
                 int min,max,mid;
                     min=0;
                 max=list.size()-1;
                 while (min<=max)
                   {
                         mid = (min+max)>>1;
                        String str = list.get(mid);
                        int num=str.compareTo(key);
                         //int num = cmp.compare(str,key);
                      sop(str+"...."+key);
                         if (num>0)
                         max=mid-1;
                       else if (num<0)
                       min=mid+1;
                      else
                      return mid;
                   }
             return -min-1;

}

自己写的二分式查找,功能实现不了,总是显示-min-1的值。通过sop方法,发现while循环只进行了两次,

7 个回复

倒序浏览
我试了一下,可以循环多次啊直到找到KEY
回复 使用道具 举报
漠寒 发表于 2014-10-25 09:32
我试了一下,可以循环多次啊直到找到KEY

我关了一下,重新开就好了。我找了半个小时都没找到问题。:L
回复 使用道具 举报
qq8921310 发表于 2014-10-25 11:44
我关了一下,重新开就好了。我找了半个小时都没找到问题。

二分式查找我还是不大懂,来学习学习。
回复 使用道具 举报
public class BinarySearch {

    public int binarySearch(int[] BinarySearchArray,int k,int low,int high)
    {
           
           
            int mid=0;
           
            while(low<=high)
            {
                   
                    mid=(low+high)/2;
                   
                    if(BinarySearchArray[mid]==k)
                     return mid;
                    else if(BinarySearchArray[mid]>k)
             high=mid-1;
                    else if(BinarySearchArray[mid]<k)
                    low=mid+1;
            }
           
            return 0;
           
    }
       
       
       
       
        public static void main(String[] args) {

                int[] BinarySearchArray=new int[]{1,2,3,4,5,6,7,8,9,10};
               
                BinarySearch binarySearch=new BinarySearch();
               
                int k=binarySearch.binarySearch(BinarySearchArray,11,0,BinarySearchArray.length-1);
               
                if(k==0)
                {
                        System.out.println("数组中没有这个数字");
                       
                }
                else
                {
                        System.out.println("这个数字的位置是:"+k);
                       
                }
               

        }

}
回复 使用道具 举报
neokevin 来自手机 初级黑马 2014-10-28 02:09:08
地板
如果是巩固知识的话,我记得毕老师写的二分查找跟Arrays.binarysearch()

点评

毕老师的讲解非常好!  发表于 2014-10-28 07:37
回复 使用道具 举报
neokevin 来自手机 初级黑马 2014-10-28 02:10:09
7#
已经非常相似了,看一下源码也是不错的选择哦…
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马