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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Java_Bird 中级黑马   /  2015-9-8 21:41  /  232 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

前提:数组必须有序  
只要中间索引对应的值与传入的值不相等就拿中间索引对应的值和传入的值比较
如果中间索引对应的值比传入的值大,那么最大索引就应该是中间索-1(因为已经确定不是中间索引个)
如果中间缩影对应的值比传入的小,那么最小索引就应该是中间索引+1(因为已经确定不是中间索引个)
为什么要+1,-1,因为中间缩影对应的值不等于传入的值,
在下次遍历的时候就可以忽略该索引

最后判断最小值是否最大值  



public static intgetIndex(int[] arr, int value) {
              intmaxIndex = arr.length - 1;// 定义最大索引
              intminIndex = 0;// 定义最小索引
              intmidIndex = (maxIndex + minIndex) / 2;// 定义中间索引
              while(arr[midIndex] != value) {
                     if (arr[midIndex] > value) {
                            maxIndex = midIndex - 1;
                     } else if (arr[midIndex] < value) {
                            minIndex = midIndex + 1;
                     }
                     // 如果数据不存在。
                     if (minIndex > maxIndex) {
                            return -1;
                     }
                     // 下一次二分查找开始
                     midIndex = (maxIndex + minIndex) / 2;
              }
              returnmidIndex;
       }

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马