![]()
二分查找
- 前提:该数组必须有序(从大到小、从小到大)
- 思想:每一次都查找中间元素,比较大小就能减少一半的元素
代码
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
}
}
运行
![]()