Dada una tabla de nombres introducidos por el usuario, ordenarlos mediante el método de la sacudida (variante de la burbuja). Después el usuario pedirá buscar un nombre que se buscará en la tabla mediante el método de búsqueda dicotómica o binaria.
NOTA: enlace a una página de algoritmos de ordenación http://www.cs.ubc.ca/~harrison/Java/sorting-demo.html
public class OrdenarBuscar { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); int pos, cuantos; int ini, fin, i; int izq, der, med; String[] nombres; String aux, buscado; boolean intercambio = true; System.out.print("Cuántos nombres quiere introducir: "); cuantos = entrada.nextInt(); nombres = new String[cuantos]; entrada.nextLine(); //Para limpiar el buffer. System.out.println("Introduzca "+cuantos+" nombres."); for (pos=0; pos<nombres.length; pos++) nombres[pos] = entrada.nextLine(); ini = 0; fin = nombres.length-1; while (ini<fin & intercambio){ intercambio = false; for (i=ini;i<fin;i++){ if (nombres[i].compareTo(nombres[i+1])>0){ aux = nombres[i]; nombres[i] = nombres[i+1]; nombres[i+1] = aux; intercambio = true; } } fin--; if (intercambio){ intercambio = false; for (i=fin-1;i>=ini;i--){ if (nombres[i].compareTo(nombres[i+1])>0){ aux = nombres[i]; nombres[i] = nombres[i+1]; nombres[i+1] = aux; intercambio = true; } } } i++; } System.out.println("Nombres ordenados:"); for (pos=0; pos<nombres.length; pos++) System.out.print(nombres[pos]+" "); System.out.println("\nIntroduzca el nombre a buscar."); buscado = entrada.nextLine(); izq = 0; der = nombres.length-1; med = (izq+der)/2; while (buscado.compareTo("")!=0){ while (buscado.compareTo(nombres[med])!=0 & izq<der){ if (buscado.compareTo(nombres[med])<0) der = med-1; else izq = med+1; med = (izq+der)/2; } if (buscado.compareTo(nombres[med])==0) System.out.println("El nombre buscado está en la posición: "+med); else System.out.println("No encontrado."); System.out.println("Introduzca otro nombre."); buscado = entrada.nextLine(); } System.out.println("FIN."); } }