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

© yuhongzhen 中级黑马   /  2015-11-25 19:38  /  336 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

二分查找比较好理解,就是将排好序的数组一分为二,将指定的数值与数组中间值比较,根据比较的结果,将索引值进行移动,再与移动后的索引值中间值进行比较,直到找到该数值,或发现不存在为止。

public static int getNum(int[] arr, int num) {
                int min = 0;//最小索引值
                int max = arr.length;//最大索引值
                int mid = (min + max) / 2;//中间索引值
                //将指定的值与数组的中间索引值的元素比较
                while (true) {
                        if (num < arr[mid]) {
                                max = mid = 1;//小于中间索引值,最大索引值移动至中间索引值-1
                        } else if (num > arr[mid]) {
                                min = mid + 1;//大于中间索引值,最小索引值移动至中间索引值+1
                        } else {
                                return mid;//返回找到的索引值
                        }
                        mid = (min + max) / 2;//比较一次后重新计算中间索引值
                        if(max<min){
                                return -1;//如果不存在该数值,返回-1
                        }
                }

        }

0 个回复

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