算法:当数组的数据量很大适宜采用该方法。采用二分法查找时,数据需是有序不重复的,如果是无序的也可通过选择排序、冒泡排序等数组排序方法进行排序之后,就可以使用二分法查找。 基本思想:假设数据是按升序排序的,对于给定值 x,从序列的中间位置开始比较,如果当前位置值等于 x,则查找成功;若 x 小于当前位置值,则在数列的前半段中查找;若 x 大于当前位置值则在数列的后半段中继续查找,直到找到为止,但是如果当前段的索引最大值小于当前段索引最小值,说明查找的值不存在,返回-1,不继续查找。

import java.util.Arrays;

public class 二分法 {
public static void main(String[] args) {
//1.数组基本查找功能
int[] arr = { 3, 5, 7, 9, 10 };
int index = getIndex(arr, 11);
System.out.println("index=" + index);
//2.数组二分法查找(写法1)
int[] b = { 13, 15, 19, 28, 33, 45, 78, 106 };
int index2 = halfSearch(b, 45);
System.out.println("二分法查找方法(1)index2=" + index2);
//2.数组二分法查找(写法2)
int index3 = halfSearch2(b, 99 );
System.out.println("二分法查找方法(2)index3=" + index3);
//下面是Java自带的方法,但必须保证是从小到大排序的数组
int index4 = Arrays.binarySearch(b, 33);
System.out.println("Java自带的方法执行的二分法查找 index4=" + index4);
} /*
* 数组常见功能:查找
*/
// 两个明确:明确返回值,明确该传入那些参数
public static int getIndex(int[] arr, int key) {
for (int x = 0; x < arr.length; x++) {
if (arr[x] == key)
return x; }
return -1;
} /*
* 二分法查找方法法1 :必须是有序数据
*/
//第一个参数进行二分法查找的数组,第二个参数查找的值
//返回值:查找数据在数组中对应的索引值
public static int halfSearch(int[] arr, int key) {
int min,mid,max;
min = 0;
max = arr.length-1;
//数组中间值对应的索引
mid = (min+max)/2;
while(key!=arr[mid]){
if(key>arr[mid])
min = mid+1;
else if(key<arr[mid])
max = mid-1;
else if(max<min)
return -1;
//每次循环新的中间值
mid = (min+max)/2;
}
return mid;
}
/*
二分法查找方法二(原理相同,写法稍微不同)
*/
public static int halfSearch2(int[] arr, int key){
int max,min,mid;
min = 0;
max = arr.length-1;
while(min<=max){
mid = (max+min)>>1;
if(key>arr[mid])
min = mid+1;
else if(key<arr[mid])
max = mid-1;
else
return mid;
}
return -1;
} }

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

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

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

  2. Java中数组

    数组的定义格式: 1: 数据类型[] 数组名 2: 数据类型 数组名 动态初始化: 初始化的时候 系统会默认给数组赋值 数据类型[] 变量名 = new 数据类型[数组长度] int[] arr = ...

  3. java中数组的相关知识

      1. 2.数组的命名方法 1)int[]ages=new int[5]; 2) int[]ages; ages=new int[5]; 3)int[]ags={1,2,3,4,5}; 4)int[ ...

  4. Java中数组的特性

    转载:http://blog.csdn.net/zhangjg_blog/article/details/16116613 数组是基本上所有语言都会有的一种数据类型,它表示一组相同类型的数据的集合,具 ...

  5. 在java 中,数组与 List<T> 类型的相互转换

    在java中,数组与List<T> 之前进行互相转换,转换方法可总结为以下几种: 一. 将 数组转换成List<T> 1. 使用 Collections 的addAll 方法 ...

  6. Java中数组的初始化方式

    Java中数组的初始化方式    初始化方式有两种: 1.静态初始化:初始化时由程序猿显式指定每一个数组元素的初始值,由系统指定数组长度 2.动态初始化:初始化时由程序猿仅仅指定数组长度,由系统为数组 ...

  7. java中数组复制的两种方式

    在java中数组复制有两种方式: 一:System.arraycopy(原数组,开始copy的下标,存放copy内容的数组,开始存放的下标,需要copy的长度); 这个方法需要先创建一个空的存放cop ...

  8. Java中数组的插入,删除,扩张

    Java中数组是不可变的,但是可以通过本地的arraycop来进行数组的插入,删除,扩张.实际上数组是没变的,只是把原来的数组拷贝到了另一个数组,看起来像是改变了. 语法: System.arrayc ...

  9. java中数组、集合、字符串之间的转换,以及用加强for循环遍历

    java中数组.集合.字符串之间的转换,以及用加强for循环遍历: @Test public void testDemo5() { ArrayList<String> list = new ...

随机推荐

  1. 设计模式之GOF23组合模式

    组合模式Composite 使用组合模式的场景:把部分和整体的关系用树形结构表示,从而使客户端可以使用统一的方式处理对象和整体对象(文件和文件夹) 组合模式核心: -抽象构件(Component)角色 ...

  2. ORACLE 统计文件后缀SQL

    ORACLE 统计文件后缀SQL查询语句 select lower(substr(file_name,instr(file_name, '.', -1),length(file_name))),cou ...

  3. AJAX二

    二.简单的dom操作 2.使用js的dom获取页面数据 由于ajax不使用form 而form具有自动收集数据的功能. 不使用form,就需要使用dom手写代码收集数据 ①获得承载数据的元素对象 &l ...

  4. redis的哨兵集群,自动切换主从库

    Redis-Sentinel是redis官方推荐的高可用性解决方案,当用redis作master-slave的高可用时,如果master本身宕机,redis本身或者客户端都没有实现主从切换的功能. 而 ...

  5. Django之MTV模式

    MTV与MVC+url控制器 MVC框架: ·         M:model.py  就是和数据库打交道用的,创建表等操作 ·         V:View  视图(视图函数:逻辑处理响应函数,ht ...

  6. python函数总结,你值得拥有

    目录 函数总结 函数定义与结构 函数名的使用 函数的参数 名称空间与作用域 名称空间 作用域 函数嵌套 内置函数(globals( ),locals( )) global+nonlocal 可迭代对象 ...

  7. Java基础知识面试题及答案-整理

    1.String类可以被继承吗?  不能.String类在声明中使用final关键字修饰符.使用final关键字修饰的类无法被继承. Java语言的开发者为什么要将String类定义为final类呢? ...

  8. 【c#】Visual Studio 的下载及安装

    “工欲善其事,必先利其器” 这篇博文我们介绍一下如何正确的安装基于c#使用的vs 2017. 1.首先在官网下载Visual Studio,下载地址:https://www.visualstudio. ...

  9. 自定义cursor鼠标 图片

    1.CSS3自定义鼠标样式 最近想要使用自定义鼠标样式,看了cursor的样式不好看,就想到cursor属性能不能自定义图片,翻看了下CSS3文档,发现是可以的 格式为:cursor:url('图片u ...

  10. Android_存储之SharedPreferences

    一.概述 SharedPreferences是一种轻量级的数据存储方式,采用键值对的存储方式. SharedPreferences只能存储少量数据,大量数据不能使用该方式存储,支持存储的数据类型有bo ...