2021-01-02二分查找

package com.llb.数组;

import java.util.Scanner;

/**
 * 二分查找
 * 要求线性表必须采用顺序存储结构,表中元素按关键字有序排列
 * 1,定义两个变量,表示查找范围,默认 min=0  max=最大索引
 * 2,循环查找, minmax 时,表示要查找的元素在数组中不存在,返回 -1
 */
public class ErFen {
     
    public static void main(String[] args) {
     
        int[] arr = {
     0,1,2,3,4,5,6,7,8,9};
        for ( int num: arr
             ) {
     
            System.out.print(num+"\t");
        }
        System.out.println();
        System.out.print("输入要查找的元素 : ");
        Scanner sc = new Scanner(System.in);
        int number = sc.nextInt();
        /**
         * 1,现在要干什么         二分查找
         * 2,干这件事需要什么       数组  元素
         * 3,干完了,要不要把结果返回调用者    把索引返回给调用者
         */
        int index = erFen(arr,number);
        if (index < 0){
     
            System.out.println("查找的元素不存在");
        }else {
     
            System.out.println("元素的索引 : "+index);
        }

    }
    private static int erFen(int[] arr, int number){
     
        //定义查找范围
        int min = 0;
        int max = arr.length - 1;
        //循环查找 min < max
        while (min <= max){
     
            //计算出中间位置 mid
            int mid = (min + max) >> 1;
            //mid指向的元素 > number
            if (arr[mid] > number){
     
                //表示查找的元素在左边
                max = mid - 1;
            }else if(arr[mid] < number){
     
                min = mid + 1;
            }else {
     
                return mid;
            }

        }
        return -1;//说明要查找的目标元素根本不存在
    }
}

你可能感兴趣的:(二分查找,java,算法)