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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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了~~~

1 个回复

正序浏览
我又了然了..................我把下标和实际值比大小  所以全返回-1     囧~~
                                        if(search > avg){
                                        min = avg+1;
                                        }
                                        else if(search < avg){
                                                max = avg-1;
                                                }
                                                else
                                                return avg;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马