图解:

二分折半查找使用前提是数组是有序。

题目分析:

通过观察发现,本题目要实现查找指定数值在元素有序的数组中存储的位置(索引),返回该位置(索引)。

我们使用数组最中间位置的元素值与要查找的指定数值进行比较,若相等,返回中间元素值的索引

最中间位置的元素值与要查找的指定数值进行比较,若不相等,则根据比较的结果,缩小查询范围为上次数组查询范围的一半;

再根据新的查询范围,更新最中间元素位置,然后使用中间元素值与要查找的指定数值进行比较

n  比较结果相等,返回中间元素值的索引

n  比较结果不相等,继续缩小查询范围为上次数组查询范围的一半,更新最中间元素位置,继续比较,依次类推。

当查询范围缩小到小于0个元素时,则指定数值没有查询到,返回索引值-1。

解题步骤:

定义3个用来记录索引值的变量,变量min记录当前范围最小索引值,初始值为0;变量max记录当前范围最大索引值,初始值为数组长度-1;变量mid记录当前当前范围最中间元素的索引值,初始值为(min+max) / 2

使用循环,判断当前范围下,最中间元素值与指定查找的数值是否相等

n  若相等,结束循环,返回当前范围最中间元素的索引值mid

n  若不相等,根据比较结果,缩小查询范围为上一次查询范围的一般

u  中间元素值 比 要查询的数值大,说明要查询的数值在当前范围的最小索引位置与中间索引位置之间,此时,更新查询范围为:

范围最大索引值 = 上一次中间索引位置 -1;

u  中间元素值 比 要查询的数值小,说明要查询的数值在当前范围的最大索引位置与中间索引位置之间,此时,更新查询范围为:

范围最小索引值 = 上一次中间索引位置 +1;

u  在新的查询范围中,更新中间元素值的位置,再次使用最中间元素值与指定查找的数值是否相等。

中间索引值 = (范围最小索引值 +范围最大索引值) / 2;

每次查询范围缩小一半后,使用if语句判断,查询范围是否小于0个元素,若小于0个元素,则说明指定数值没有查询到,返回索引值-1。

代码如下:

//import java.util.*;

class Test {

public static void main(String[] args) {

int[] arr = {13,15,19,28,33,45,78,106};

int index = halfSearch(arr,78);

//int[] arr = {35,211,2,109,58,899};

//bubbleSort(arr);

// selectSort(arr);

//for (int x = 0; x < arr.length; x++) {

// System.out.print(arr[x]+",");

// }

System.out.println("index="+index);

}

/*

二分法

*/

public static int halfSearch(int[] arr, int key) {

int min,mid,max;

min = 0;

max = arr.length - 1;

while (min<=max) {

mid = (min+max)>>1;

if (key>arr[mid])

min = mid + 1;

else if (key

max = mid -1;

else

return mid;

}

return -min-1;

}

}

java数组二分查找的简单例题_Java基础-练习 数组元素二分查找(折半查找)相关推荐

  1. java web定义数组_Java基础之数组--数组常用操作

    3.2一维数组 3.2.1声明数组 数组类型[] 数组名称:int[] username; 或者 数组类型 数组名称[];int username[]; 3.2.2初始化一维数组 一维数组初始化有两种 ...

  2. java mp3数组_Java基础之数组(一)

    数组的定义 数组是相同类型数据的有序集合.数组描述的是相同类型的若干个数据,按照 一定的先后次序排列组合而成.其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们.数组的三个基本特 ...

  3. java数组键_Java基础之数组

    数组 数组就是用于存储相同数据类型数据的一个容器.可以通过有规律的索引来访问没有规律的元素. 一维数组 定义格式:元素的数据类型[ ] 数组名称 = new 元素的数据类型 [ 数组容器大小 ]: 数 ...

  4. java 一维数组_java基础 ---- 一维数组

    为什么要使用数组: 因为不使用数组计算多个变量的时候太繁琐,不利于数据的处理. --------   数组也是一个变量,是存储一组相同类型的变量 声明一个变量就是在内存中划出一块合适的空间 声明一个数 ...

  5. java返回特定下标元素_java基础--输出数组中指定元素的下标

    java基础--输出数组中指定元素的下标 java基础--输出数组中指定元素的下标 package com.lcn.day05; public class ArrayDemo8 { /** * 输出数 ...

  6. java实现初始化三角形数组_Java基础之数组初始化和数组JVM分析

    什么是数组 所谓数组,是具有相同数据类型的若干变量或者数据按照一定排序规则组合起来的一种数据存储格式.数组中的数据称为数组元素,我们使用索引来标识数组元素在数组中的存储位置,索引从0开始,步长是1,其 ...

  7. 遍历数组长度_Java基础之数组

    (1)数组:存储同一种数据类型的多个元素的容器(注意和集合的区别 后面的总结之中有). (2)特点:每一个元素都有编号,从0开始,最大编号是长度-1.编号的专业叫法:索引. (3)定义格式 A:数据类 ...

  8. typedef 定义数组类型_Java基础之数组

    (1)数组:存储同一种数据类型的多个元素的容器(注意和集合的区别 后面的总结之中有). (2)特点:每一个元素都有编号,从0开始,最大编号是长度-1.编号的专业叫法:索引. (3)定义格式 A:数据类 ...

  9. 折半查找判定树——(快速判断某棵树是否为折半查找判定树)

    折半查找 也被称作二分查找,即将需要查找的元素与数组中间的元素进行比较:若比中间的元素小,则再与前子表的中间元素进行比较,以此类推直至查找到所需查找元素,或者所需查找元素不在此表中. 折半查找判定树( ...

最新文章

  1. shell训练营Day31
  2. 测试串行回收与堆初始值有关系02
  3. dell跳过开机硬件检测,关闭dell开机硬件自检 戴尔笔记本电脑每次开机自动硬件检查怎么取消?...
  4. linux终端密码星星,如何获得您的sudo密码在Ubuntu中显示为星号 | MOS86
  5. linux实现字符火焰动画,linux flamegraph火焰图使用
  6. CSS3 多列布局的column-gap 和 column-rule属性
  7. Ext JS 4.2.0发布
  8. 指定范围内每个数的所有真约数
  9. 【笔记】OpenCV3 人脸识别
  10. 【蓝牙】 HCI log分析工具----Frontline ComProbe Protocol Analysis System使用教程
  11. 杨辉三角形Python实现
  12. 电影《功夫熊猫3》中的管理知识
  13. 腾讯云微搭x腾讯文档,企业协同研发更便捷
  14. OneNote for win10 登录不了
  15. Spark程序编译报错error: object apache is not a member of package org
  16. cf950f Curfew
  17. 0基础运营小白如何写出10W+,六招搞定!
  18. MySQL中登录报错_mysql登录报错 ERROR 1045 (28000)
  19. 骨传导蓝牙耳机排行榜、精选五款骨传导耳机品牌推荐
  20. 3. 投票 案例项目(合集)

热门文章

  1. u-boot移植第五弹——2013.10u-boot通过tftp下载到内存中运行
  2. qhfl-2 ContentType组件
  3. python 用户输入_Python中如何让用户输入内容
  4. 运维Linux系统中的用户管理
  5. 如何用 Nacos 构建服务网格生态?
  6. 开源自建/托管与商业化自研 Trace,如何选择?
  7. 从理念到实践跳跃式演进!云的原生“免疫系统”如何有机作战?
  8. 为什么你应该关心领域模型?
  9. Java 开发者必备手册开放下载!
  10. 阿里云邀您参加2020年数据湖高峰会议