Algoritmos de búsqueda binaria de uso común en Java

La premisa de utilizar la búsqueda binaria es que la matriz que se busca se ha ordenado.



Primero generamos una matriz con números aleatorios y luego ordenamos la matriz.

		Random rand = new Random();
        int[] arr = new int[30];
        //给数组内的元素随机赋值
        for (int i = 0; i < arr.length; i++) {
    
    
            arr[i] = rand.nextInt(100);
        }
        //用Arrays类排序
        Arrays.sort(arr);
        //遍历数组
        for (int i : arr) {
    
    
            System.out.print(i+"\t");
        }
        //换行
        System.out.println();




Idea: Defina el bit de inicio (el primer elemento de la matriz) y el bit final (el último elemento de la matriz), la posición media mid = (inicio + fin) / 2, compare el elemento a buscar con el elemento en la posición intermedia, si el elemento a buscar es menor que el valor correspondiente a la posición intermedia, entonces end = mid -1, si el elemento a buscar es mayor que el valor correspondiente a la posición intermedia, entonces start = mid + 1, si se encuentra el valor correspondiente, salga del bucle; de ​​lo contrario, siga buscando en un bucle hasta inicio> fin, lo que demuestra que no se encuentra el valor correspondiente y el bucle se detiene.


el código se muestra a continuación:

		//随机生成一个数,在数组中用二分法查找它
		int v = rand.nextInt(100);
		//count统计查找次数
		//index为假设下标
        int begin=0,end=arr.length-1,mid,count=0,index=-1;
        while (begin<=end){
    
    
            mid = begin + (end-begin)/2; //或者mid = (begin+end)/2;
            if (v>arr[mid]){
    
    
                begin = mid+1;
                count++;
            }else if(v<arr[mid]){
    
    
                end = mid-1;
                count++;
            }else {
    
    
            	//存放该值在数组中的下标
                index = mid;
                count++;
                break;
            }
        }




El código completo es el siguiente:

import java.util.Arrays;
import java.util.Random;

public class BinarySearch {
    
    
    public static void main(String[] args) {
    
    
        Random rand = new Random();
        int[] arr = new int[30];
        for (int i = 0; i < arr.length; i++) {
    
    
            arr[i] = rand.nextInt(100);
        }
        Arrays.sort(arr);
        for (int i : arr) {
    
    
            System.out.print(i+"\t");
        }
        System.out.println();
        int v = rand.nextInt(100);
        int begin=0,end=arr.length-1,mid,count=0,index=-1;
        while (begin<=end){
    
    
            mid = begin + (end-begin)/2;
            if (v>arr[mid]){
    
    
                begin = mid+1;
                count++;
            }else if(v<arr[mid]){
    
    
                end = mid-1;
                count++;
            }else {
    
    
                index = mid;
                count++;
                break;
            }
        }
        System.out.println("一共查找了"+count+"次");
        System.out.println(v+(index!=-1 ? "存在于数组中下标为"+index:"不存在于数组中"));
    }
}

La salida de la consola es:
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_48482704/article/details/108939972
Recomendado
Clasificación