二分查找:(折半查找)
前提:数组必须是有序的。
思想:每次都猜中间的那个元素,比较大或者小,就能减少一半的元素。
思路:A:定义最小索引,最大索引。
B:比较出中间索引
C:拿中间索引的值和要查找的元素进行比较
相等:就直接返回当前的中间索引
不相等:
大了:往左边找
小了:往右边找
D:重新获取最小索引或者最大索引
大了:往左边找
max = mid-1;
小了:往右边找
min = mid+1;
E:回到B的位置

public static void main(String[] args) {
//定义一个数据
int[] arr = {11,22,33,44,55,66,77};

//写功能实现
int index = getIndex(arr,33);
System.out.println("index:" + index);//2

//如果传入值不存在:
int index = getIndex(arr.253);
Systme.out.pirntln("index:" + index);//-1

}

/*
* 两个明确:
* 返回值类型:int
* 参数列表:int[] arr,int value
*/

public static int getIndex(int[] arr,int value){
//定义最大索引,最小索引
int max = arr.length -1;
int min = 0;

//计算出中间索引
int mid = (max + min)/2;

//拿中间索引的值和要查找的值进行比较
while(arr[mid] != value){
if(arr[mid] > value){
max = mid-1;
}else if(arr[mid]<value){
min = mid + 1;
}
//判断如果值不存在 返回-1
if(min>max){
return -1;
}
mid = (min + max)/2;
}
return mid;
}

Arrays类:专门对数组进行的方法类
注意事项:
有一个无序数组 eg:{24,69,80,57,13}
不可先冒泡排序,再使用二分查找,应该基本查找
因为,冒泡排序后会更改数组的顺序。
Arrays:针对数组进行操作的工具类,比如说排序和查找。
1.public static String toString(int[] a) 把数组转成字符串
2.public static void sort(int[] a) 对数组进行排序
3.public static int binarySearch(int[] a,int key) 二分查找

public static void main(String[] args) {
//定义一个数组
int [] arr = {24,69,80,57,13};

//public static String toString(int[] a) 把数组转成字符串
System.out.println("排序前:" + Arrays.toString(arr));

//public static void sort(int[] a) 对数组进行排序
System.out.println(Arrays.sort(arr));

//使用二分查找需要有序数组{13, 24, 57, 69, 80} 这个数组是第二个方法排序后的结果
//public static int binarySearch(int[] a,int key) 二分查找
System.out.println(Array.binarySearch(arr,57));//2
System.out.println(Array.binarySearch(arr,577));//-6
}

Java中的二分查找的更多相关文章

  1. Java中常用的查找算法——顺序查找和二分查找

    Java中常用的查找算法——顺序查找和二分查找 神话丿小王子的博客 一.顺序查找: a) 原理:顺序查找就是按顺序从头到尾依次往下查找,找到数据,则提前结束查找,找不到便一直查找下去,直到数据最后一位 ...

  2. Java学习之二分查找算法

    好久没写算法了.只记得递归方法..结果测试下爆栈了. 思路就是取范围的中间点,判断是不是要找的值,是就输出,不是就与范围的两个临界值比较大小,不断更新临界值直到找到为止,给定的集合一定是有序的. 自己 ...

  3. STL中的二分查找———lower_bound,upper_bound,binary_search

    关于STL中的排序和检索,排序一般用sort函数即可,今天来整理一下检索中常用的函数——lower_bound , upper_bound 和 binary_search . STL中关于二分查找的函 ...

  4. STL中的二分查找

    本文转载于https://blog.csdn.net/riba2534/article/details/69240450 使用的时候注意:必须用在非递减的区间中 二分查找的原理非常简单,但写出的代码中 ...

  5. cuda中的二分查找

    使用背景 通常,在做高性能计算时,我们需要随机的连接某些点.这些点都具有自己的度量值,显然,度量值越大的值随机到的概率就会越大.因此,采用加权值得方法: void getdegreeSum(DG *g ...

  6. STL中的二分查找——lower_bound 、upper_bound 、binary_search

    STL中的二分查找函数 1.lower_bound函数 在一个非递减序列的前闭后开区间[first,last)中.进行二分查找查找某一元素val.函数lower_bound()返回大于或等于val的第 ...

  7. 二维数组中的查找 - Java版 -简单二分查找 -<<剑指Offer>> -水题

    如题 (总结) -认真读题, 还WA了一次, https://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e?tpId=13&am ...

  8. Java实现的二分查找算法

    二分查找又称折半查找,它是一种效率较高的查找方法. 折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小 于该中点 ...

  9. Java:冒泡排序 | 二分查找

    2018-10-29 20:16:46 冒泡排序 例子(对数字排序): 假设有这样一组数字:32, 8, 128, 2, 64 现在对其进行冒泡排序(*表示下次比较的开始数字): 32>8? t ...

随机推荐

  1. 用序列到序列和注意模型实现的:Translation with a Sequence to Sequence Network and Attention

    In this project we will be teaching a neural network to translate from French to English. 最后效果: [KEY ...

  2. 自动驾驶研究回顾:CVPR 2019摘要

    我们相信开发自动驾驶技术是我们这个时代最大的工程挑战之一,行业和研究团体之间的合作将扮演重要角色.由于这个原因,我们一直在通过参加学术会议,以及最近推出的自动驾驶数据集和基于语义地图的3D对象检测的K ...

  3. iOS 构建静态库

    一..a 文件静态库打包 打开 Xcode 创建一个新的 Static Library 工程,取名 MyStaticLibrary. 创建工程完毕后,系统自动创建了一个同名类,添加一个方法用于测试. ...

  4. WiX 简介

    最近研究了一下WIX打包,简单总结一下,方便自己以后查阅,也希望能给需要的人一些提示和帮助. WiX 简介 Windows Installer XML (WiX ) 平台是一组工具与规范,使您能够创建 ...

  5. [noip2016]愤怒的小鸟<状压dp+暴搜>

    题目链接:https://vijos.org/p/2008 现在回过头去看去年的考试题,发现都不是太难,至少每道题都有头绪了... 这道题的数据范围是18,这么小,直接暴力呗,跑个暴搜就完了,时间也就 ...

  6. 总结:自动将函数对象添加到字典的bug

    介绍 本文以ATM项目为背景,介绍一个比较实用的编程技巧,使用装饰器将项目中的指定函数添加到字典中. 利用字典通过key访问value的特点,实现用户输入编号,通过字典直接获取并调用编号对应的功能函数 ...

  7. 【学习笔记】CART算法

    1. 背景介绍 CART(Classification and Regression Trees,分类回归树)算法是一种树构建算法,既可以用于分类,也可以用于回归.它的工作原理是:使用二元切分来处理连 ...

  8. 数据源管理 | 基于JDBC模式,适配和管理动态数据源

    本文源码:GitHub·点这里 || GitEE·点这里 一.关系型数据源 1.动态数据源 动态管理数据源的基本功能:数据源加载,容器维护,持久化管理. 2.关系型数据库 不同厂商的关系型数据库,提供 ...

  9. Java 程序该怎么优化?(技巧篇)

    搬砖者:为什么程序总是那么慢?它现在到底在干什么?时间都花到哪里去了? 面试官:简单谈谈 Java 程序性能优化? 1. 字符串处理优化,乃优化之源. 研发过程中,String 的 API 用的应该是 ...

  10. mysql清空表后id重1开始

    通过"truncate table 表名"方式重置清空id,让id从1开始自动递增,