Java基础知识强化60:经典查找之二分查找

时间:2021-08-30 16:03:10

1. 二分查找

      二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。

比较 基本查找 与 二分查找 ?

(1)基本查找:数组元素无序(从头找到尾)

(2)二分查找(折半查找):数组元素有序

2. 二分查找原理

(1)思想:每次都猜中间那个元素,比较大或者小,就能减少一半的元素。

(2)原理图:

Java基础知识强化60:经典查找之二分查找

3. 二分查找的代码实现:

 package cn.itcast_04;

 /*
* 查找:
* 基本查找:数组元素无序(从头找到尾)
* 二分查找(折半查找):数组元素有序
*
* 分析:
* A:定义最大索引,最小索引
* B:计算出中间索引
* C:拿中间索引的值和要查找的值进行比较
* 相等:就返回当前的中间索引
* 不相等:
* 大 左边找
* 小 右边找
* D:重新计算出中间索引
* 大 左边找
* max = mid - 1;
* 小 右边找
* min = mid + 1;
* E:回到B
*/
public class ArrayDemo {
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); //假如这个元素不存在后有什么现象呢?
index = getIndex(arr, 333);
System.out.println("index:"+index);
} /*
* 两个明确:
* 返回值类型: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;
} //加入判断
if(min > max){
return -1;
} mid = (max +min)/2;
} return mid;
}
}

 运行效果,如下:

Java基础知识强化60:经典查找之二分查找