1. 이분법 설명
이분법의 핵심 아이디어는 인덱스의 이동으로 검색 속도가 기하학적으로 증가합니다.
이진 검색 방법은 발견된 배열 요소의 인덱스를 반환하고, 찾을 수 없으면 -1
2를 반환합니다. 예
이진 검색 방법은 배열에서 매개변수 값의 위치를 찾습니다.
시나리오 설명:
매개변수에 따라 값은 배열에서 아래 첨자 범위를 찾습니다. 예: 배열 {0, 1, 3, 5}에서 2의 범위는 {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에서 배열 요소의 위치를 찾는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!