二分查找:(折半查找)
前提:数组必须是有序的。
思想:每次都猜中间的那个元素,比较大或者小,就能减少一半的元素。
思路: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. PyTorch大更新!谷歌出手帮助开发,正式支持TensorBoard | 附5大开源项目

    大家又少了一个用TensorFlow的理由. 在一年一度的开发者大会F8上,Facebook放出PyTorch的1.1版本,直指TensorFlow"腹地". 不仅宣布支持Tens ...

  2. 不可思议的hexo,五分钟教你免费搭一个高逼格技术博客

    引言 作为程序员拥有一个属于自己的个人技术博客,绝对是百利无一害的事,不仅方便出门装b,面试时亮出博客地址也会让面试官对你的好感度倍增.经常能在很多大佬的技术文章的文末,看到这样一句话: " ...

  3. JVM 常见参数配置

    -XX:+PrintGC  每次触发GC的时候打印相关日志 -XX:+PrintGCDetails 每次触发GC的时候更详细的相关日志 -XX:+UseSerialGC 串行回收 -Xms 堆初始值( ...

  4. 《带你装B,带你飞》pytest成魔之路4 - fixture 之大解剖

    1. 简介 fixture是pytest的一个闪光点,pytest要精通怎么能不学习fixture呢?跟着我一起深入学习fixture吧.其实unittest和nose都支持fixture,但是pyt ...

  5. NKOJ3775 数列操作

    问题描述 给定一个长度为n的序列,你有一次机会选中一段连续的长度不超过d的区间,将里面所有数字全部修改为0.请找到最长的一段连续区间,使得该区间内所有数字之和不超过p. 输入格式 第一行包含三个整数n ...

  6. G - 土耳其冰淇凌 Gym - 101194D(二分答案 + 贪心检验)

    熊猫先生非常喜欢冰淇淋,尤其是冰淇淋塔.一个冰淇淋塔由K个冰淇淋球堆叠成一个塔.为了使塔稳定,下面的冰淇淋球至少要有它上面的两倍大.换句话说,如果冰淇淋球从上到下的尺寸是A0, A1, A2,···, ...

  7. Spring ApplicationContext 容器

    Spring ApplicationContext 容器 Application Context 是 BeanFactory 的子接口,也被成为 Spring 上下文. Application Con ...

  8. 查看手机wifi密码

    方法一 手机共享wifi,获得二维码,之后解码获得密码. 二维码解吗工具: https://jiema.wwei.cn/ 方法二 手机扫描wifi共享的二维码后,会有提示信息,其中会显示出密码.

  9. Java基础知识1-Java简介

    Java语言技术架构 JAVASE:(Java platform to Standard Edition)标准版,用于桌面级应用开发. JAVAME:(Java plataform to Micro ...

  10. DOS命令集

    1.ASSOC显示或修改文件扩展名关联.ASSOC [.ext[=[fileType]]]  .ext      指定跟文件类型关联的文件扩展名  fileType  指定跟文件扩展名关联的文件类型键 ...