Está en la página 1de 9

Esta unidad abarco los temas de los mtodos de bsqueda, los dos observados fueron los de bsqueda binaria

y el de bsqueda secuencial. Adems de los mtodos de ordenamiento quicksort rpido iterativo y rpido recursivo. Primeramente se analizaron los algoritmos
La bsqueda binaria: consiste en dividir el intervalo de bsqueda en dos partes, comparando el elementos buscado con el central. En caso de no ser iguales se redefinen los extremos del intervalo (segn el elemento central sea mayor o menos que el elemento buscado) disminuyendo el espacio de bsqueda. El proceso concluye cuando el elementos es encontrado, o bien cuando el intervalo de bsqueda se anula. Este mtodo funciona nicamente para arreglos ordenados. Con cada iteracin del mtodo el espacio de bsqueda se reduce a la mitad, por lo tanto el numero de comparaciones a realizar disminuye notablemente. Esta disminucin resulta significativa cuanto mas grande sea el tamao del arreglo. A continuacin se presenta el algoritmos de bsqueda binaria.

Algoritmo de Bsqueda Binaria:


Binaria (V, N, X) {Este algoritmo busca al elementos X en el arreglo ordenado V de N componentes} {IZQ, CEN y DER son variables de tipo entero. BANDERA es una variable de tipo booleano} 1. Hacer IZQ 1, DER N y BANDERA FALSO 2. Repetir mientras (IZQ DER) y (BANDERA = FALSO) Hacer CEN PARTE ENTERA ((IZQ + DER) /2) 2.1 Si X = V [CEN] entonces Hacer BANDERA VERDADERA Si no {Redefinir intervalo de bsqueda} 2.1.1 Si X = V [CEN] entonces Hacer IZQ CEN + 1 Si no Hacer DER CEN -1 2.1.2 {Fin del condicional del paso 2.1.1} 2.2 {Fin del condicional del paso 2.1} 3. {Fin del ciclo del paso 2} 4. Si BANDERA = VERDADERO entonces

Escribir El elemento esta en la posicin CEN Si no Escribir El elemento no esta en el arreglo 5. {Fin del condicional del paso 4}
RAPIDO ITERATIVO (El algoritmo ordena los elementos de un arreglo utilizando el mtodo rpido, de manera iterativa. A es un arreglo de n elementos) {TOP, INI, FIN y POS son variables de tipo entero. PILAMENOR y PILAMAYOR son arreglos unidimensionales } 1. Hacer TOP 1, PILAMENOR [TOP] 1 y PILAMAYOR [TOP]N 2. Repetir mientras (TOP>0) Hacer INI PILAMENOR [TOP], FIN PILAMAYOR [TOP] y TOP TOP -1 Llamar al algoritmo REDUCEITERATIVO con INI, FIN y POS. 2.1 Si INI < (POS-1) entonces Hacer TOPTOP + 1, PILAMENOR [TOP] INI y PILAMAYOR [TOP] POS - 1 2.2 {Fin del condicional del paso 2.1} 2.3 Si FIN > (POS+1) entonces Hacer TOP TOP +1, PILAMENOR [TOP]POS+1 y PILAMAYOR [TOP] FIN 2.4 {Fin del condicional del paso 2.3} 3. {Fin del ciclo del paso 2}

REDUCEITERATIVO (INI, FIN, POS) {INI y FIN representan las posiciones de los extremos izquierdo y derecho, respectivamente, del conjunto de elementos a evaluar. POS es una variable donde se almacena el resultado de este algoritmo} {IZQ, DER y AUX son variables de tipo entero. BAND es una variable de tipo booleano} 1.Hacer IZQINI,DERFIN, POSINI y BAND VERDADERO 2. Repetir mientras BAND VERDADERO 2.1 Repetir mientras (A[POS A [DER]) y (POS DER) Hacer DER -1 2.2 {Fin del ciclo del paso 2.1} 2.3 Si POS = DER entonces Hacer BAND FALSO Si no Hacer AUX A [POS], A[POS] A [DER], A [DER] AUX y POS DER 2.3.1 Repetir mientras (A [POS] A[IZQ] y (POS IZQ) Hacer IZQ IZQ +1

2.3.2 {Fin del ciclo del paso 2.3.1} 2.3.3 Si POS = IZQ entonces Hacer BAND FALSO Si no Hacer AUX A[POS], A[POS]A[IZQ], A[IZQ] AUX y POS IZQ 2.3.4 {Fin del condicional del paso 2.3.3} 2.4 {Fin del condicional del paso 2.3} 3. {Fin del condicional del paso 2}

Programa que realiza el mtodo de bsqueda binaria y toma el tiempo de ejecucin de la bsqueda:
import java.util.GregorianCalendar; import java.util.Calendar; public class BusquedaBinaria { public static int busquedaBinaria(int[] Arreglo, int elemento) { int i = 0, centro = 0, posicion = 0, inferior = 0, superior = Arreglo.length-1; while(inferior <= superior) { centro = (superior + inferior) / 2; if (Arreglo[centro] == elemento) return centro; else if (Arreglo[centro] > elemento) superior = centro - 1; else inferior = centro + 1; } return -1; } public static void main (String[] args) { java.util.Scanner Leer = new java.util.Scanner(System.in); System.out.print("Tamao del arreglo: "); int tamaoArreglo = Leer.nextInt();

int[] Arreglo = new int[tamaoArreglo]; System.out.println("Introduce el arreglo dato por dato, separado por espacios saltos de linea: "); for(int i=0; i<Arreglo.length; i++) Arreglo[i] = Leer.nextInt(); System.out.print("Elemento a buscar: "); int elemento = Leer.nextInt(); Calendar calendario = new GregorianCalendar(); int posicion = busquedaBinaria(Arreglo, elemento); Calendar calendario2 = new GregorianCalendar(); long diff = calendario2.getTimeInMillis() - calendario.getTimeInMillis(); Calendar diferencia = new GregorianCalendar(); diferencia.setTimeInMillis(diff); if(posicion == -1) System.out.println("\nElemento no encontrado"); else System.out.println("\nElemento " + elemento + " encontrado en la posicin " + posicion); System.out.println("\n\nTiempo de ejecucin: " + diferencia.get(Calendar.MINUTE) + "min. " + diferencia.get(Calendar.SECOND) + "seg. " + diferencia.get(Calendar.MILLISECOND) + "milliseg."); } }

Programa que ordena un vector de 5 elementos por medio del mtodo quicksort:
package ordenamiento; import java.awt.*; import javax.swing.*; import java.awt.event.*; public class quickSort extends JFrame{ int a[]=new int[5]; int i, n, j; int max, mayor; String salida1="", salida2=""; JTextArea areaSalida=new JTextArea(6,6); JTextArea areaSalida2=new JTextArea(6,6); JTextField numero=new JTextField(15); String salida=""; public quickSort(){ super("Ordenamiento Quick Sort"); JLabel etiqueta=new JLabel("Cuanles numeros quieres?"); JLabel etiqueta1=new JLabel("Los numeros son:"); JButton capturar=new JButton("Capturar"); capturar.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent evento){ captura(); } } ); JButton ordenar=new JButton("Ordenar"); ordenar.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent evento){ quick(a,n); } } ); Container contenedor=getContentPane(); contenedor.setLayout(new FlowLayout()); contenedor.add(etiqueta); contenedor.add(numero); contenedor.add(capturar); contenedor.add(etiqueta1); contenedor.add(areaSalida); contenedor.add(ordenar);

contenedor.add(areaSalida2); setSize(300,300); setVisible(true); } public void captura(){ if (numero.getText().equals("")){ JOptionPane.showMessageDialog(null,"Escriba un nombre"); numero.setText(""); } else{ a[i]=Integer.parseInt(numero.getText()); salida2+=a[i]+"\n"; i++; numero.setText(""); if (i==5){ n=i; JOptionPane.showMessageDialog(null,"Fin de la captura"); } areaSalida.setText(salida2); } } public void muestra(int nn,int a3[]){ for(int k=0;k<nn;k++) salida1+=a3[k]+"\n"; areaSalida2.setText(salida1); } public void quick(int lista[], int n){ partir(0,n-1); } public void partir(int primero,int ultimo){ int i,j,aux,central,cont=1; i=primero; j=ultimo; central=a[(primero+ultimo)/2]; while(cont==1){ while(a[i]<central){ i++; } while(a[j]>central){ j--; } if (i<=j){ aux=a[i]; a[i]=a[j];

a[j]=aux; if (i<=j) i+=1; if (j<ultimo) j+=1; } if (i>j) cont=0; } if (primero<j) partir(primero,j); else if(i<ultimo) partir(i,ultimo); else if (primero==j) muestra(n,a); } public static void main(String[] args) { quickSort aplicacion3 =new quickSort(); aplicacion3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }

Programa que realiza el mtodo de Bsqueda Secuencial: Este mtodo se usa para buscar un elemento de un vector, explorar secuencialmente el vector, es decir; recorrer el vector desde el primer elemento hasta el ltimo. Si se encuentra el elemento buscado se debe visualizar un mensaje similar a Fin de Bsqueda o Elemento encontrado y otro que diga Posicin igual en caso contrario, visualizar un mensaje similar a Elemento no existe. import java.util.*; class Programa8 { public static void main(String[]args) { int a[],n,n1,indice; Scanner sc=new Scanner(System.in); System.out.print("Ingresa tamao del vector: "); n=sc.nextInt(); a=new int[n]; a=inicializa(n); muestra(a); System.out.print("Ingresa numero a buscar: "); n1=sc.nextInt(); indice=busquedaLineal(a,n1); if(indice==-1) { System.out.println("tu nmero no esta en la lista"); } else { System.out.println("tu nmero esta en el indice: "+indice); } } static int[] inicializa(int n) { int i,j,a[]=new int[n]; for(i=0;i<n;i++) { a[i]=randomxy(1,50); } return a; } static int busquedaLineal(int a[],int n) { int i; for (i=0;i<a.length;i++) { if (a[i] == n) {

return i+1; } } return -1; } static void muestra(int a[]) { int n=a.length; for(int i=0;i<n;i++) { System.out.print(a[i]+" "); } System.out.print("\n\n"); } static int randomxy(int x,int y) { int ran=(int) (Math.floor(Math.random()*(y-x+1))+x); return ran; } }

También podría gustarte