数组的查找(搜索):线性查找和二分法查找

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("很遗憾没有找到哦!");
        }
    }
}

上一篇:Progressive JPEG图片渐进加载方案


下一篇:【王道机试】二分查找-查找-北邮