![]()
二分查找
- 前提:该数组必须有序(从大到小、从小到大)
 
- 思想:每一次都查找中间元素,比较大小就能减少一半的元素
 
代码
package com.sun.base.Array.text;
/**
 * @Author: fei
 * @CreateTime:2020-11-26
 */
public class Demo02 {
    public static void main(String args[]){
        //定义一个有序数组
        int[] arr=new int[]{11,13,16,18,19,36,47,52};
        int index = getIndexByELE(arr, 16);
        System.out.println("输出数组中第一次出现该元素的索引是:"+index);
    }
    private static int getIndexByELE(int[] arr,int ele) {
        int minIndex = 0;//定义最小索引
        int maxIndex = arr.length - 1;//最大索引;
        int centerIndex = (maxIndex + minIndex) / 2;//中间索引
        while (minIndex<=maxIndex) {
            //如果这个元素等于这个中间元素,则直接返回中间值
            if (ele == arr[centerIndex]) {
                return centerIndex;
            }
            //如果这个元素小于中间元素,则移动最大索引
            else if (ele < arr[centerIndex]) {
                maxIndex = centerIndex - 1;
            }
            //如果这个元素大于中间索引,则移动最小索引
            else if (ele > arr[centerIndex]) {
                minIndex = centerIndex + 1;
            }
            //重新定义中间索引值
            centerIndex = (maxIndex + minIndex) / 2;
        }return -1;//若该元素不在这个数组内,则返回-1
    }
}
运行
![]()