采用二分法时,数据应是有序并且不重复的

与小时候玩的猜数游戏是一样的,会让你猜一个他所想的1~100之间的数,当你猜了一个数后,他会告诉你三种选择中的一个,比他想的大,或小,或猜中了,为了能用最少的次数猜中,必须从50开始猜,如果说你猜的小,那你必须从51~100开始猜,所以下一次猜的是75(51~100的一半),但如果他说有点大,则推出那个数在1~49之间,所以下一次猜25,每猜一次都将可能的值化为两部分

实现思想:假设数据是升序排序的,给一个定值x,从序列的中间位置开始查找,若x小于当前位置值,则在序列的前半段中查找,并再将数据一分为二

若x大于当前位置值,则在序列的后半段中查找,再将数据一分为二

若当前位置值等于x,则直接返回,如果没有找到则返回-1

实现代码:

public class Half {

    public static void main(String[] args) {
        int[] arr = new int[]{12, 23, 34, 45, 56, 67, 77, 89, 90};//length:9
        System.out.println(search(arr, 34));

    }

    public static int search(int[] arr, int key) {
        int start = 0;

        while (start <= end) {
            int middle = (start + end) / 2;//中间值:4,1,2
            if (key < arr[middle]) {
                end = middle - 1;
            } else if (key > arr[middle]) {
                start = middle + 1;
            } else {
                return middle;
            }
        }
        return -1;
    }
}

//输出2

最新文章

  1. Linux下添加apache虚拟主机
  2. Yii2 使用小部件 Breadcrumbs
  3. JqueryTips小实验,浏览器滚动条不限制
  4. 【CSS3】Advanced10:Gradient
  5. Struts学习之自定义结果集
  6. 设计模式总结(Java)—— 适配器模式
  7. Hibernate由model类自动同步数据库表结构
  8. Java连接FTP成功,但是上传是失败,报错:Connected time out
  9. systemverilog中实现饱和截位和饱和截位的分析
  10. hdu1256
  11. vue+elementUI表格列显示隐藏遇到bug
  12. 构建NTP时间服务器
  13. mapreduce的cleanUp和setUp的特殊用法(TopN问题)和常规用法
  14. ReactiveCocoa(II)
  15. MySQL 常用使用语句
  16. flask session,蓝图,装饰器,路由和对象配置
  17. ASP.NET MVC的ContentResult
  18. es6笔记(4) Set数据结构
  19. windows(64位)下使用curl命令
  20. ios开发之NSString用strong还是用copy?

热门文章

  1. PLSQLDeveloper安装与配置(详细图文)
  2. Codeforces700C. Break Up
  3. 自定义日志工具LogUtil
  4. AjaxFileUpload文件上传组件(php+jQuery+ajax)
  5. ubuntu忘记root密码的解决办法
  6. Linux下tmp文件夹的文件自动删除的问题(转)
  7. Ubuntu 16.04错误:正在读取软件包列表... 有错误! E: Encountered a section with no Package: header E: Problem with MergeList /var/lib/apt/lists/ppa.launchpad.net_t-tujikawa_ppa_ubuntu_dists_xenial_main_i18n_Translatio
  8. JSP中HTTP状态码
  9. html5 编辑
  10. 8VC Venture Cup 2016 - Final Round (Div2) E