/*
* 查找:
* 基本查找:数组元素无序(从头找到尾)
* 二分查找(折半查找):数组元素有序
*
* 分析:
* A:定义最大索引,最小索引
* B:计算出中间索引
* C:拿中间索引的值和要查找的值进行比较
* 相等:就返回当前的中间索引
* 不相等:
* 大 左边找
* 小 右边找
* D:重新计算出中间索引
* 大 左边找
* max = mid - 1;
* 小 右边找
* min = mid + 1;
* E:回到B
直接查找---查找的数组中的数是无序的
package day13;
public class LX4 {
public static void main(String[] args) {
//定义一个数组
int [] arr ={23,12,45,67,54,98};
//调用基础查找
int A = show(arr,98);
System.out.println(A);
}
//查找数组中的指定元素的索引--基础查找
//两个明确--返回值类型--int--参数列表--int[]arr-int value
public static int show(int []arr,int value){
for (int x=0;x< arr.length;x++){
if(arr[x]==value){
//如果索引处的值等于元素--则返回该处的索引
return x;
}
}
//进行判断--如果数组中没有该元素--则返回的是-1
return -1;
}
}
折半查找:----查找的数组中的数是顺序排列的数
public class ZheBanChaZhao {
public static void main(String[] args) {
//给出一个有规律的数组
int [] arr = {11,22,33,44,55,66,77,88,99,8888,888,66};
//调用折半查找的功能
int A = show(arr,9999);
System.out.println(A);
}
//明确两个需求---返回值类型--int---参数列表---int[]arr--int value(传入要查找的元素)
public static int show(int [] arr,int value) {
////定义一个最大索引和最小索引
int max = arr.length - 1;
int min = 0;
//找出中间索引量--进行第一次判断查找
int mid = (min + max) / 2;
//运行次数不明确采用while循环进行
//如果索引值的元素不等于要查找的元素则进入循环体内--如果相等--则直接return返回mid索引值
while (arr[mid] != value) {
//中间索引值的元素不等于要查找的元素
//进入判断---与查找到元素值谁大谁小的判断
//如果中间索引值的元素大于要查找的元素--则进入下边这个循环
if (arr[mid] > value) {
//此时的中间索引值的元素大于要查找的元素
//进行向左的折半查找==此时的最大元素为原来的mid-1---最小元素不变
max=mid-1;
} else if (arr[mid] < value) {
//此时的中间索引值的元素小于要查找的元素
//进行向右的折半查找==此时的最小元素为原来的mid+1最大元素不变
min=mid+1;
}
//加入判断
//如果最小值大于最大值说明整个数组元素并遍历完毕--则说明数组中没有查找的此元素
if(min>max){
// 返回值返回-1;
return -1;
}
//进行if判断后再次改变mid的值
mid =(max+min)/2;
}
//mid索引位置上的元素与要查找的元素相等---则return返回mid
return mid;
}
}