codice:
package test;
import java.util.Arrays;
public class TestBS{
private double[] a = new double[]{1.2,3.17,15.3,15.33,16.0};
public void createSortedRandomArray()
{
int MIN = 0;
int MAX = 5000;
//alloca l'array con 1000 posizioni
a = new double[1000];
//genera mille numeri random e li inserisce nell'array
for (int i = 0; i < a.length; i++) {
a[i] = Math.random() * MAX - MIN + MAX;
}
//ordina l'array (prerequisito per la ricerca binaria
//è l'ordinamento dell'array in input)
Arrays.sort(a);
}
public void printA()
{
if(a.length > 0)
System.out.print(a[0]);
for (int i = 1; i < a.length; i++) {
System.out.print("," + a[i]);
}
System.out.println();
}
public double[] getA() {
return a;
}
public int binarySerch(double number)
{
int i = 0;
int j = a.length - 1;
while (i <= j) {
int index = (i + j) / 2;
if (a[index] < number)
i = index + 1;
else if (a[index] > number)
j = index - 1;
else
return index;
}
return -(i + 1);
}
public static void main(String[]args){
TestBS test = new TestBS();
//genera un array casuale ordinato di 1000 elementi
test.createSortedRandomArray();
//stampa l'array generato
test.printA();
//testa l'uguaglianza dei due algoritmi per 100000 volte
double[] array = test.getA();
boolean success = true;
for (int i = 0; i < 100000; i++) {
//genera un numero random da 0 a 7000 da ricercare
double toSearch = Math.random() * 7000 - 0 + 7000;
//cerca con il mio algoritmo
int mine = test.binarySerch(toSearch);
//cerca con l'algoritmo java
int java = Arrays.binarySearch(test.getA(), toSearch);
if(mine != java)
{
System.out.println("attenzione: i due algoritmi differiscono se si cerca il numero " + toSearch);
success = false;
break;
}
}
if(success)
System.out.println("i due algoritmi coincidono perfettamente");
}
}
Ciao sopra ti ho scritto un'implementazione che soddisfa la tua richiesta e un metodo main di test che ti mostra come questo algoritmo sia perfettamente equivalente all'implementazione che trovi in Arrays