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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我love 中级黑马   /  2016-5-27 22:34  /  278 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
*  查找:
*                  基本查找:数组元素无序(从头到尾)
*                  二分查找(折半查找):数组元素有序
*  
*  分析:
*                  A:定义最大索引,最小索引
*                  B:计算中间索引
*                  C:拿中间索引的值和要找的值进行比较
*                                  相等:就返回当前的中间索引
*                                  不相等:
*                                                  中间索引值比查找值大                左边找
*                                                  中间索引值比查找值小                右边找
*                  D:重新计算中间索引值
*                                  中间索引值比查找值大                        max = mid - 1
*                                  中间索引值比查找值小                        min = min + 1
*                 E:回到B
*/

public class ArrayDemo {
                        public static void main(String[] args) {
                                //定义一个数组
                                int[] arr = {12, 23, 34 ,45, 56 ,67 ,78 ,89 };
                                 int index = getIndex(arr,45);
                                System.out.println("index:" + index);
                        }
                       
                        //做成方法,返回值类型是int,参数列表是int[] arr,int value
                       
                        public static int getIndex(int[] arr,int value) {
                                //定义最大索引,中间索引,最小索引变量
                                int min = 0;
                                int max = arr.length - 1;
                                int mid = (min + max) /2;
                               
                                //如果不相等就进入while循环
                                while (arr[mid] != value) {
                                        if (arr[mid] >  value) {
                                                max = mid -1 ;
                                        } else if (arr[mid]  < value) {
                                                min = mid + 1 ;
                                        }
                                        mid = (min + max) /2;
                                        //假如有这个索引值不存在呢?就返回-1;
                                        if (min > max) {
                                                return -1;
                                        }
                                }
                               
                                return    mid;
                               
                        }
}

0 个回复

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