Java SE 036 Método de búsqueda de matrices Java y análisis de búsqueda binaria

(1) Mientras una persona no se rinda a sí misma, el mundo entero no se dará por vencido contigo.
(2) Nací para ser de gran utilidad . (3) Si no
puedo soportar el sufrimiento del aprendizaje, debo soportar el sufrimiento de la vida. Qué doloroso es Comprensión profunda.
(4) Debes ganar al hacer cosas difíciles . (
5) El espíritu es la verdadera espada.
(6) Conquistar oponentes dos veces, la primera vez en el corazón.
(7) Escribir no es realmente fácil. Si te gusta o tienes algo para ti Ayuda a recordar que te gusta + seguir o marcar como favorito ~

Java SE 036 Método de búsqueda de matrices Java y análisis de búsqueda binaria

1. Búsqueda de matriz

public class ArraySearchTest{
    
    
	public static int search(int [] a , int value){
    
    
		for(int i = 0 ; i < a.length ; i ++){
    
    
			if(a[i] == value){
    
    
				return i;
			}			
		}
		return -1;
	}

	public static void main(String [] args){
    
    	
		int [] a = new int[]{
    
    1,4,2};
		int value = 3;
		System.out.println(search(a,value));
	}
}

Este tipo de búsqueda es un método de búsqueda directa, la eficiencia es la más baja, por qué es ineficiente, si la longitud de la matriz es muy larga, si es 10,000, es necesario comparar 10,000 veces. Este precio es considerable.

2. Búsqueda binaria

(1) Requisitos: La matriz a buscar debe estar en orden. El orden ascendente y descendente son posibles.

(2) La búsqueda binaria consiste en dividir la matriz en dos bajo la premisa de que la matriz está ordenada y comparar directamente el elemento del medio con el elemento que se va a buscar. Si el número del medio es menor que el número que se va a buscar, entonces, el número del medio El número anterior será menor que el número que se buscará, por lo que se ignoran todos los números anteriores al número del medio. Ciertamente no cumple con los requisitos. Luego, tome el número del medio del número restante y luego compárelo con el número que se va a comparar nuevamente, y compare a su vez, filtrando el número antes del número del medio.

(3) En pocas palabras: la clasificación toma el medio

public class ArrayBinarySearchTest
{
    
    
	public static int binarySearch(int [] a,int value){
    
    
		int low = 0 ; //数组中第一个元素的下标
		int high = a.length - 1;//数组中最后一个元素的下标
		//取中间元素。它是我们要跟待比较那个value值进行比较的那个元素它的索引在什么地方。
		int middle;
		//什么情况下让它一直能去进行判断,只要low不大于这个high就可以一直去判断。
		while(low <= high){
    
    
			//确定中间元素,索引的位置
			middle = (low + high)/2;
			
			for(int i = 0 ; i < a.length; i++){
    
    
				System.out.print(a[i]);
				if(i == middle){
    
    
					System.out.print("#");//标记一下中间元素的位置
				}
				System.out.print("   ");
			}
			System.out.println();

			//用中间元素与value进行比较
			if(a[middle]==value){
    
    
				return middle;
			}
			//如果没找到,有两种情况,一种是小于value,一种是中间的元素大于value,如果中间的元素小于value,则中间元素以及中间元素左边的元素都不要,
			//如果是大于的话,中间元素以及中间元素右边的也都不要
			if(a[middle]<value){
    
    
				low = middle + 1;//即将中间的元素与中间元素左边的元素都过滤掉,这时对最右边元素下标没有影响,只对最左边元素下标有影响
			}

			if(a[middle]>value){
    
    
				high = middle-1;//即将中间的元素与中间元素右边的元素都过滤掉。这时对最左边元素下标没有影响,只对最右边元素下标有影响
			}
		}
		return -1;
	}
	
	public static void main(String [] args){
    
    
		int[] a = new int[]{
    
    11,22,44,992,809,928,443,222};
		//冒泡排序
		for(int i = 0 ; i < a.length-1; i++){
    
    //为何length-1,length-1就是最后一个元素的下标
			for(int j = 0 ; j < a.length-i-1; j++){
    
    
				if(a[j]>a[j+1]){
    
    
					int temp = a[j];
					a[j] = a[j+1];
					a[j+1] = temp;
				}
			}
		}

		int value = 1;

		int index = binarySearch(a,value);
		System.out.println(index);
	}
}

Supongo que te gusta

Origin blog.csdn.net/xiogjie_67/article/details/108501189
Recomendado
Clasificación