1、二分法说明
二分法的核心思想就是索引的移动,查找速度是几何级递增的。
二分查找法,返回查找到数组元素的索引,如果找不到返回-1
2、实例
二分法定位参数值在数组中的位置
场景描述:
根据一个参数值找到它在数组内的下标区间,例如: 2在数组{0,1,3,5}的区间为{1,2}
package com.study.collection; import java.util.arrays; /** * @auth zhangmj * @date 2019/2/12 9:14 */public class examplelist<t> { public static void main(string[] args) { int[] intarray = {0,1,2,10,15,20,25,29,31,36,39,40,42,43,46,50,55,60,63,66,70}; int num =2; int[] resultarray = getpostionbytwopoint(intarray, num); system.out.println(arrays.tostring(resultarray)); } private static int[] getpostionbytwopoint(int[] intarray, int num) { // 判断 if(intarray == null || intarray.length == 0){ throw new runtimeexception(数组不能为空); } // 定义最小和区间 if(intarray[0] > num || intarray[intarray.length - 1] < num){ throw new runtimeexception("不在数组范围之内"); } int middle = 0; int low = 0; int high = intarray.length - 1; // 定义首尾特殊的情况 if(intarray[low] == num){ int[] resultarray = {low, low}; return resultarray; }else if(intarray[high] == num){ int[] resultarray = {high, high}; return resultarray; } int i = 1; // 数在中间的情况 while(low < high){ system.out.println("查找第 " + i + " 次"); middle = (low + high + 1)/2; if(intarray[middle] == num){ int[] resultarray = {middle, middle}; return resultarray; }else if(intarray[middle] > num){ // num 在 low 和 middle 之间 int previous = middle - 1; if(previous > low && intarray[previous] < num){ int[] resultarray = {previous, middle}; return resultarray; } high = middle; }else if(intarray[middle] < num){ int latter = middle + 1; if(latter < high && intarray[latter] > num){ int[] resultarray = {middle, latter}; return resultarray; } low = middle; } i++; } throw new runtimeexception(定位异常); }}
以上就是java中如何使用二分法查找数组元素位置的详细内容。
