数据结构与算法(java)《二分查找》

  1. 基本二分查找public class BinarySearch {/*** 1.定义一个有序数组,* 2.定义两个变量i,j* 3.定义一个待查找的数* 4.查到返回索引的值,查不到返回-1*/public static int binarySearchBasic(int[] a,int target) {//定义两个指针,i指向头指针,j指向尾指针int i = 0;int j =a.length-1;//进行判断循环while (i<=j){int m=(i+j)/2; //向下取整,int类型会自动取整,有漏洞,建议使用右移if (a[m]<target){i=m+1;//在目标左边}else if (a[m]>target){j=m-1;//在目标右边}else{return m; //找到了,返回索引}}return -1;//没有找到}//测试public static void main(String[] args) {//定义一个数组int[] i={7,13,21,30,38,44,52,53};int target =21;int searchBasic = binarySearchBasic(i, target);System.out.println(searchBasic);}
    

2.改动版二分查找

public static int binarySearchBasic1(int[] a,int target) {//定义两个指针,i指向头指针int i = 0;int j =a.length; //此时的j不指向队尾,不参与比较,只是定义一个范围//进行判断循环while (i<j){int m=(i+j)/2; //向下取整,int类型会自动取整,有漏洞,建议使用右移if (a[m]<target){i=m+1;//在目标左边}else if (a[m]>target){j=m;//在目标右边}else{return m; //找到了,返回索引}}return -1;//没有找到
}

3.遇到的问题:

3.1 为什么是i<=j而不是i<j?

答:i==j意味着i,j它们指向的元素也会参与比较。

3.2 (i+j)/2有没有问题?

int maxValue = Integer.MAX_VALUE-1;

int i1=0;

int m=(maxValue+i1)/2;

System.out.println(m);//此时的值为1073741823

int i2 = (m + maxValue)/2;

System.out.println(i2);//此时的值为负数,不符合要求

因为Java有符号数,第一个二进制数为1的话,表示为负,建议使用右移:m=(i+j)>>>1;

数据结构与算法《二分查找》相关推荐

  1. 数据结构与算法——二分查找与二叉排序树

    文章目录 1.预备知识 1.1 题目目录 1.2 二分查找 1.3 递归二分查找 1.4 循环二分查找 1.5 二叉查找(排序)树 1.6 二叉搜索树的代码实现 2.搜索插入位置 2.1 题目描述 2 ...

  2. 数据结构与算法 | 二分查找

    假如我们在图书馆中整理书记,书按照序号有序排序,序号不连续,当我们需要从书堆中找到特定序号的书时,如果一本一本查找的话,我们可能需要查找N次.但如果我们先找到中间的书,将书分成两堆,与待查书对比,待查 ...

  3. 数据结构与算法——二分查找

    目录 前言 一.二分查找是什么? 二.代码示例 三.算法时间复杂度 总结 前言 二分查找是一种高效的查找算法,二分查找又称为折半查找,其输入是一个有序(升序或降序)的元素列表.本文通过具体的例子来说明 ...

  4. 数据结构与算法——二分查找与二叉查找树汇总整理

    目录 预备知识:二分查找基础知识 例1:插入位置(easy) (二分查找) 例2:区间查找(medium)(二分查找) 例3:旋转数组查找(medium)(二分查找) 预备知识:二叉查找(排序)树基础 ...

  5. java 二分查找_计算机入门必备算法——二分查找法

    1.引言 笔者对于计算机的研究一直停滞不前,近期想对一些算法进行复习和进一步的研究,每天都会更新一个新的算法,算法有难有易,层层递进.不希望能学的有多么高深,只希望在一些最基本的算法上有编码的思路,或 ...

  6. 数据结构与算法学习⑤(BFS和DFS 贪心算法 二分查找)

    数据结构与算法学习⑤ 数据结构与算法学习⑤ 1.BFS和DFS 1.1.深度优先搜索算法 1.2.广度优先搜索算法 面试实战 102. 二叉树的层序遍历 104. 二叉树的最大深度 515. 在每个树 ...

  7. 数据结构与算法-查找算法(二分查找,插值查找,斐波那契(黄金分割法)查找)

    查找算法 以下三种算法的基本思想相同,都是利用递归来寻找 二分查找 思路分析 1.首先确定该数组的中间下标,min = (left + right) / 2 2.然后让需要查找的的数findVal和a ...

  8. Java数据结构与算法——线性查找 二分查找 插值查找

    1.线性查找 有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含此名称[顺序查找] 要求: 如果找到了,就提示找到,并给出下标值. package com.szh. ...

  9. Java数据结构与算法 线性查找和二分查找

    查找 查找(searching)是在一组数据项中找到指定的目标元素(target element)或者判定组内不存在目标的过程.要查找的数据项组有事成为查找池(search pool). 在此讨论两种 ...

  10. 数据结构三大查找算法(二分查找、插值查找、斐波那契数列查找)C语言实现

    文章目录 查找 二分查找(折半查找) 插值查找 斐波拉契查找 总结: 查找 查找是在大量的信息里面寻找一个特定的信息元素 (1)静态查找和动态查找: 静态或者动态都是针对查找表而言的.动态表指查找表中 ...

最新文章

  1. 刻意练习:Python基础 -- Task11. 魔法方法
  2. java.lang.IncompatibleClassChangeError: Found interface org.apache.poi.util.POILogger, but class was
  3. 【Consul】Consul实践指导-健康检查(Checks)
  4. Winform中怎样获取项目图片资源并转换为Image对象
  5. Karrigell 入门教程
  6. msf生成php,使用msfpayload生成后门(asp,aspx,php,jsp,exe)等
  7. 云南计算机专升本数据结构_云南省统招专升本考些什么科目(三)
  8. java连接池hkai,MySQL连接配置文件密码加密及其在多种连接池上的应用
  9. labelcommand打印条码_Zebra条码打印机编程命令
  10. 湿空气性质计算,随笔与学习记录(2.水蒸气分压,含湿量,相对湿度)
  11. 计算机中级《软件设计师》考试分析
  12. Java图片高保真缩放工具类
  13. vs2017工具箱问题(不见工具箱选项卡此组中没有可用控件控件灰化)
  14. 2022年江苏专转本计算机大类考生经验分享(上岸南工程)
  15. Python pathlib Path
  16. (ssl1458)数字金字塔(三角形)逆推法
  17. 从Hadoop1.0到Hadoop2.0架构的优化和发展探索详解
  18. Access denied for user ''@'localhost' to database
  19. [Unity3D]用C#在unity里面写一个简单的红绿灯
  20. 微信小程序 全局字体控制(字体大小)

热门文章

  1. 计算机实训前言研究内容,计算机专业实践论文提纲模板 计算机专业实践论文提纲怎样写...
  2. Tomcat - 解决which must be escaped when used within the value错误
  3. CTF之萌新web学习(命令执行2)
  4. 2014年音视频即时通讯市场的割据
  5. 后端如何编写API文档给到前端?
  6. 机械设计自动化行业现在吃香吗?有前途吗?
  7. 上海移动HG6145D光猫之超级用户登录方法
  8. od使用的小tips
  9. 【权威发布】360天眼实验室:Xshell被植入后门代码事件分析报告(完整版)
  10. Oracle日志挖掘之LogMiner