数组练习之二分查找

二分查找

  • 前提:该数组必须有序(从大到小、从小到大)
  • 思想:每一次都查找中间元素,比较大小就能减少一半的元素

代码

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

    }
}

运行

posted @ 2020-11-26 20:17  某人很酷  阅读(47)  评论(0)    收藏  举报