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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王哲zhe 中级黑马   /  2015-8-20 23:37  /  190 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
* 折半查找,二分查找:
*                 前提:数组必须是有序的。
*/
public class ArrayDemo2 {
        public static void main(String[] args) {
                int[] arr = { 18, 37, 54, 76, 92 };

                // 如何获取数据92在数组中的索引呢
                //int index = getIndex(arr, 92);
                int index = getIndex(arr, 76);
                //int index = getIndex(arr, 26);
                System.out.println(index);
        }

        public static int getIndex(int[] arr, int value) {
                // 定义最大索引
                int maxIndex = arr.length - 1;
                // 定义最小索引
                int minIndex = 0;
                // 定义中间索引
                int midIndex = (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;
                }
                return midIndex;
        }
}

0 个回复

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