黑马程序员技术交流社区

标题: 为什么我写的折半查找 找不到中间值...?求帮助 [打印本页]

作者: 蒋昌宏    时间: 2012-2-26 00:37
标题: 为什么我写的折半查找 找不到中间值...?求帮助
class find{
                        public static void main(String args[]){
                                int x[] = {22,33,44,55,66,77,88};
                                int search = searchValue2(x,55);
                                System.out.println("["+search+"]");
                                }
                       
                        public static int searchValue(int x[],int search){
                                int max = x.length - 1;
                                int min = 0;
                                int avg = (max+min)>>>1;
                               
                                while(x[avg] != search){
                                        if(search>x[avg]){
                                                min = avg+1;
                                                }
                                        else if(search<x[avg]){
                                                max = avg-1;
                                                }
                                       
                                        if(min>max)
                                        return -1;       
                                       
                                                avg = (max+min)>>>1;
                                }
                                return avg;
                }
               
                public static int searchValue2(int x[],int search){
                        int max = x.length-1;
                        int min = 0;
                        int avg = (max+min)>>>1;
                       
                        while(max>=min){
                                if(search > avg){
                                        min = avg+1;
                                        }
                                        else if(search < avg){
                                                max = avg-1;
                                                }
                                                else
                                                return avg;
                                avg = (max+min)>>>1;
                                }
                                return -1;
                        }
        }


只要不是取中间标识位的数就都OK,一取中间标识位的数就成-1了~~~
作者: 蒋昌宏    时间: 2012-2-26 00:50
我又了然了..................我把下标和实际值比大小  所以全返回-1     囧~~
                                        if(search > avg){
                                        min = avg+1;
                                        }
                                        else if(search < avg){
                                                max = avg-1;
                                                }
                                                else
                                                return avg;




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2