package cn.com.ArrayTest;
import java.util.MissingFormatArgumentException;
/**
* @author LENOVO
* @date 2020/11/25 14:30
* @description 数组的查找(搜索):线性查找,二分查找
* 二分查找的查找更加快一些,相比较于线性查找,但是前提是二分法必须要是有序的数组
*/
public class ArrayTest2 {
public static void main(String[] args) {
String[] arr = new String[]{"JJ", "DD", "MM", "BB", "GG", "AA"};
//遍历
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
System.out.println(); //换行
//线性查找:
String dest = "BB"; // 查找arr数组的BB
//这里定义一个布尔类型的 true,如果没有定义,下面直接“很遗憾···”的时候,无论找到或者没找到都要输出这句话
boolean isFlag = true;
//遍历过程找一下有没有BB
for (int i = 0; i < arr.length; i++) {
//这里是String类型,所以使用equals来比较内容是否相同
if (dest.equals(arr[i])) {
System.out.println("找到了指定元素,位置为:" + i);
isFlag = false; //如果进来了就把之前定义好的true改为false
break;
}
}
if (isFlag) {//如果没有进去过,就还是ture
System.out.println("很遗憾没有找到哦!");
}
//二分查找:前提条件是必须是有序的数组,升序或者降序都没关系
int[] arr2 = new int[]{-98, -34, -3, 0, 34, 45, 98, 234, 333}; //升序
int dest1 = 45;//要查找的数指为 45 所以声明一个变量
int head = 0; //初始的首索引
int end = arr2.length - 1;//初始的末索引
boolean isFlag1 = true;
while (head <= end) {
int middle = (head + end) / 2;// middle是中间索引值的意思
if (dest1 == arr2[middle]) {//要查找的值 刚好等于中间值
System.out.println("找到了指定元素,位置为:" + middle);
isFlag1 = false;
break;
} else if (dest1 < arr2[middle]) { //升序情况下:中间值比要查找的数大 ,那么就是从新开始了头是dest1,尾是中间值
end = middle - 1;
} else { //dest1 > arr2[middle]
head = middle + 1;
}
}
if (isFlag1) {
System.out.println("很遗憾没有找到哦!");
}
}
}