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: