Sei sulla pagina 1di 9

Arreglos Un arreglo o array es un conjunto de datos ordenados que est formado por un nmero fijo de elementos contiguos y de un mismo

tipo, por lo cual son estructuras estticas. Los arreglos se clasifican en unidimensionales y bidimensionales.
Arreglos Unidimensionales. Un arreglo unidimensional es un conjunto finito (nmero especifico de elementos), ordenado, de elementos homogneos (del mismo tipo).

Las operaciones que se pueden realizar sobre elementos individuales son: asignacin y lectura. Entre las operaciones sobre el vector completo estn: Recorrido: Es la manera de acceder de manera sucesiva y consecutiva a los contenidos de cada elemento del vector. Insercin: Consiste en introducir en el arreglo el valor del elemento. Aunque el sistema reserva memoria para cada elemento del arreglo, puede suceder que alguna posicin de memoria se encuentre vaca. Surgen dos operaciones distintas: aadir una celda de memoria vaca o aadir en una celda de memoria ocupada, para no daar el contenido de memoria donde se inserta el nuevo dato, se desplaza este contenido y todos los siguientes a una posicin superior de la misma memoria. Bsqueda: Consiste en realizar un recorrido del vector, empezando desde su posicin de memoria ms baja con el fin de localizar un dato determinado. Eliminacin: Borrar el dato contenido en una de las posiciones del vector, si es una posicin diferente de la ltima, todos los elementos con posiciones posteriores retroceden una posicin. Ordenacin: Consiste en reorganizar el contenido de cada uno de los elementos del vector segn una secuencia determinada (ascendente o descendente).
Arreglos Bidimensionales. Un arreglo bidimensional es un conjunto de datos del mismo tipo, estructurado de tal forma que se precisa de dos ndices para referenciar cada uno de sus elementos, el primer ndice se refiere a la fila y el segundo se refiere a la columna. En cuanto al almacenamiento, el sistema reserva memoria para cada uno de sus elementos destinando en conjunto, un bloque de la misma, este se halla estructurado as: almacenamiento consecutivo y secuencial de una fila dentro de otra, sin solucin de continuidad; almacenamiento consecutivo y secuencial de una columna dentro de otra, sin solucin de continuidad. Mtodo burbuja:

La Ordenacin de burbuja (Bubble Sort en ingls) es un sencillo algoritmo de ordenamiento. Funciona revisando cada elemento de la lista que va a ser ordenada con el siguiente, intercambindolos de posicin si estn en el orden equivocado. Es necesario revisar varias veces toda la lista hasta que no se necesiten ms intercambios, lo cual significa que la lista est ordenada. Este algoritmo obtiene su nombre de la forma con la que suben por la lista los elementos durante los intercambios, como si fueran pequeas "burbujas". Tambin es conocido como el mtodo del intercambio directo. Dado que solo usa comparaciones para operar

elementos, se lo considera un algoritmo de comparacin, siendo el ms sencillo de implementar.


//Librera para los cuadros de Dialogos import javax.swing.*; //inicio de la Clase Burbuja public class Burbuja{ //el vector para insertar los datos public int [] vector; //metodo Constructor public Burbuja(){ //definimos el tamao del arreglo atravs del metodo tamao() vector = new int[tamao()]; }//Fin Constructor //metodo para obtener el tamao del vector public int tamao(){ //leectura del tamao int a = Integer.parseInt(JOptionPane.showInputDialog("Tamao del Vector??:")); //retorno del tamao return a; }//fin tamao //metodo para la lectura de los datos public void leerDatos(){ //ciclo para leer todos los datos for(int i=0; i<vector.length; i++)//llenamos las posiciones del vector vector[i] = Integer.parseInt(JOptionPane.showInputDialog("Ingrese el dato:")); }//fin leerDatos //mtodo de ordenamiento Burbuja public void ordenar(){ //variable auxiliar int aux; //ciclo1 para el ordenamiento for(int i=0; i<vector.length; i++){

//ciclo2 para el ordenamiento for(int j=0; j<vector.length-1; j++){ //condicin, si el valor en posicion actual es mayor //que el valor de la siguiente posicion, realiza acciones if (vector[j]>vector[j+1]){ //variable auxiliar toma el valor de la posicion actual aux = vector[j]; //vector en la posicion actual toma el valor de la siguiente posicion vector[j] = vector[j+1]; //vector en la siguiente posicin toma el valor de la posicin actual vector[j+1] = aux; }//fin if }//fin ciclo2 }//fin ciclo1 }//fin metodo ordenar //metodo imprimir public String imprimir(){ //variable para el retorno String salida=""; //ciclo para agregar todos los datos a la variable de retorno for(int i=0; i<vector.length; i++) //agregando datos y retorno de carro a la variable de retorno salida+=vector[i]+"\n"; //retorno de la variable return salida; }//fin metodo imprimir //metodo main public static void main(String args[]){ //instancia de la clase Burbuja Burbuja burbuja = new Burbuja(); //invocar metodo leerDatos burbuja.leerDatos(); //invocar metodo ordenar burbuja.ordenar();

//invocar metodo imprimir y mostrar la salida en un cuadro de dilogo JOptionPane.showMessageDialog(null,burbuja.imprimir()); //salir de la aplicacin System.exit(0); }//fin del metodo main }//fin clase Burbuja

Ordenacin por insercin directa (InsertionSort)


El algoritmo de ordenacin por el mtodo de insercin directa es un algoritmo relativamente sencillo y se comporta razonablemente bien en gran cantidad de situaciones. Completa la tripleta de los algoritmos de ordenacin ms bsicos y de orden de complejidad cuadrtico, junto con SelectionSort y BubbleSort. Se basa en intentar construir una lista ordenada en el interior del array a ordenar. De estos tres algoritmos es el que mejor resultado da a efectos prcticos. Realiza una cantidad de comparaciones bastante equilibrada con respecto a los intercambios, y tiene un par de caractersticas que lo hacen aventajar a los otros dos en la mayor parte de las situaciones.

Este algoritmo se basa en hacer comparaciones, as que para que realice su trabajo de ordenacin son imprescindibles dos cosas: un array o estructura similar de elementos comparables y un criterio claro de comparacin, tal que dados dos elementos nos diga si estn en orden o no. (ver Algoritmos de ordenacin). Es un algoritmo estable de ordenacin interna y su complejidad temporal en el peor caso es de O(n2) y en el mejor caso -que el array ya est totalmente ordenado- puede llegar a (n) siendo n el tamao del array a ordenar. El algoritmo consiste en realizar varias pasadas sobre el array. En cada pasada se analiza un elemento, y se intenta encontrar su orden relativo entre los analizados en pasadas anteriores. Con esto se logra ir manteniendo una lista ordenada constantemente. Cada elemento a analizar se desplaza por esa lista hasta encontrar su lugar. Cuando todos los elementos del array han sido analizados, la lista est completamente ordenada. Esa es una diferencia importante con BubbleSort y SelectionSort. En ellos, en cada pasada se colocaba una carta en su sitio definitivo. En InsertionSort, el array no est totalmente ordenado hasta que el algoritmo termina. Por otro lado, en cada pasada no se recorre todo el array, sino solo los elementos analizados y ordenados en pasadas anteriores. Eso convierte a InsertionSort en un Algoritmo en lnea (online), es decir, un algoritmo que no necesita disponer de todos los elementos a ordenar desde el principio, sino que puede aceptarlos de uno en uno y procesarlos a medida que los recibe. Vamos a intentar ver informalmente el funcionamiento del algoritmo. Supondremos que el array tiene n elementos.

Realizaremos n-1 pasadas. En cada una de ellas analizaremos un elemento, colocndolo en orden relativo con respecto a los analizados en pasadas anteriors. El motivo de realizar n-1 pasadas y no n es que empezamos por el segundo elemento. Si analizsemos el primer elemento deberamos colocarlo en orden con respecto a los anteriores, pero al no haber realizado pasadas anteriores, el primer elemento forma l solito una lista ordenada. As pues, empezamos con el segundo directamente.

En cada pasada escogemos un elemento sucesivamente (en la primera pasada el segundo elemento, en la segunda el tercero.... en la n-1 el n) y recorreremos el array hacia atrs (hacia la izquieda, si quieres) buscando el orden relativo del elemento en cuestin entre los anteriores (los de su izquierda). Cada vez que encontremos un elemento que sea mayor que l realizaremos un intercambio.

UN EJEMPLO.
Vemos un ejemplo sencillo. Supongamos que queremos ordenar estos valores con el algoritmo de seleccin directa: 45, 52, 21, 37, 49, 72, 14. As pues, n=7 Empezamos a analizar el segundo elemento. El primero est en orden con respecto a s mismo. Forma l solo una lista ordenada. Intentaremos mantener una lista ordenada al principio del array. Vamos a marcar el elemento a analizar en rojo y la lista ordenada en azul. 1 pasada: El primer elemento forma la lista ordenada, y vamos a ver qu hacemos con el segundo. 45, 52, 21, 37, 49, 72, 14 Comparamos 52 con el anterior. Como est en orden, paramos. 45, 52, 21, 37, 49, 72, 14 45 y 52 forman la lista ordenada ahora. (S, s... estn en orden entre ellos 45<52) 2 pasada: Hay dos elementos en orden relativo entre ellos y vamos a ver qu hacemos con el tercero. 45, 52, 21, 37, 49, 72, 14 Comparamos el 21 con el anterior (52). No estn en orden, as que los intercambiamos. 45, 21, 52, 37, 49, 72, 14 Comparamos el 21 con el anterior (45). No estn en orden, as que los intercambiamos. 21, 45, 52, 37, 49, 72, 14 Ya no hay ms para comparar. El 21 est en su sitio con respecto a los otros de la lista. 21, 45, 52, 37, 49, 72, 14 Ahora 21, 45 y 52 forman la lista ordenada. 3 pasada: Hay tres elementos en orden relativo entre ellos y vamos a ver qu hacemos con el cuarto. 21, 45, 52, 37, 49, 72, 14 Comparamos el 37 con el anterior (52). No estn en orden, as que los intercambiamos. 21, 45, 37, 52, 49, 72, 14 Comparamos el 37 con el anterior (45). No estn en orden, as que los intercambiamos. 21, 37, 45, 52, 49, 72, 14 Comparamos el 37 con el anterior (21). S estn en orden, as que paramos. 21, 37, 45, 52, 49, 72, 14 Ahora 21, 37, 45 y 52 forman la lista ordenada. 4 pasada: Hay cuatro elementos en orden relativo entre ellos y vamos a ver qu hacemos con el quinto. 21, 37, 45, 52, 49, 72, 14 Comparamos el 49 con el anterior (52). No estn en orden, as que los intercambiamos. 21, 37, 45, 49, 52, 72, 14 Comparamos el 49 con el anterior (45). s estn en orden, as que

paramos. 21, 37, 45, 49, 52, 72, 14 Ahora 21, 37, 45, 49 y 52 forman la lista ordenada. 5 pasada: Hay cinco elementos en orden relativo entre ellos y vamos a ver qu hacemos con el sexto. 21, 37, 45, 49, 52, 72, 14 Comparamos el 72 con el anterior (52). S estn en orden, as que paramos. 21, 37, 45, 49, 52, 72, 14 Ahora 21, 37, 45, 49, 52 y 72 forman la lista ordenada. 6 y ltima pasada: Hay seis elementos en orden relativo entre ellos y vamos a ver qu hacemos con el sptimo. 21, 37, 45, 49, 52, 72, 14 Comparamos el 14 con el anterior (72). No estn en orden, as que los intercambiamos. 21, 37, 45, 49, 52, 14, 72 Comparamos el 14 con el anterior (52). No estn en orden, as que los intercambiamos. 21, 37, 45, 49, 14, 52, 72 Comparamos el 14 con el anterior (49). No estn en orden, as que los intercambiamos. 21, 37, 45, 14, 49, 52, 72 Comparamos el 14 con el anterior (45). No estn en orden, as que los intercambiamos. 21, 37, 14, 45, 49, 52, 72 Comparamos el 14 con el anterior (37). No estn en orden, as que los intercambiamos. 21, 14, 37, 45, 49, 52, 72 Comparamos el 14 con el anterior (21). No estn en orden, as que los intercambiamos. 14, 21, 37, 45, 49, 52, 72 Comparamos el 14 con el anterior (21). No estn en orden, as que los intercambiamos. 14, 21, 37, 45, 49, 52, 72 Ya no hay ms para comparar, as que el 14 est en su sitio. Ya no quedan elementos a anailizar al final del array, as que hemos terminado y el array est ordenado.

Busqueda secuencial
Este mtodo se usa para buscar un elemento de un vector, es explorar secuencialmente el vector, es decir; recorrer el vector desde el prior 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= en caso contrario, visualizar un mensaje similar a Elemento no existe en la Lista. Este tipo de bsqueda compara cada elemento del vector con el valor a encontrar hasta que este se consiga o se termine de leer el vector completo.

Mtodo de Bsqueda Binaria:

Es un mtodo que se basa en la divisin sucesiva del espacio ocupado por el vector en sucesivas mitades, hasta encontrar el elemento buscado. Esta bsqueda utiliza un mtodo de divide y vencers para localizar el valor deseado. Con este mtodo se examina primero el elemento central de la lista; si este es el elemento buscado entonces la bsqueda ha terminado. En caso contrario se determina si el elemento buscado

est en la primera o segunda mitad de la lista y a continuacin se repite el proceso anterior, utilizando el elemento central de esta sublista. Este tipo de bsqueda se utiliza en vectores ordenados.

Bsqueda binaria en java


Implementacin del algoritmo de bsqueda binaria de manera no recursiva en Java. Se utiliza una funcin esttica de la clase BusquedaAlgoritmo. Recordar que para que funcione correctamente los valores del arreglo deben estar ordenados. class BusquedaAlgoritmo { public static int buscar( int [] arreglo, int dato) { int inicio = 0; int fin = arreglo.length - 1; int pos; while (inicio <= fin) { pos = (inicio+fin) / 2; if ( arreglo[pos] == dato ) return pos; else if ( arreglo[pos] < dato ) { inicio = pos+1; } else { fin = pos-1; } } return -1; } } public class BusquedaBinaria { public static void main (String args[]) { // Llenar arreglo int [] edades = new int [35]; for (int i = 0; i < edades.length ; i++) edades[i] = i*i ; // Mostrar arreglo. for (int i = 0; i < edades.length ; i++) System.out.println ( "edades["+i+"]: "+

edades[i]);

int resultado = BusquedaAlgoritmo.buscar(edades, 9); if (resultado != -1) { System.out.println ( "Encontrado en: "+ resultado); } else { System.out.println ( "El dato no se encuentra en el arreglo, o el arreglo no est ordenado." ); } } }

BUSQUEDA BINARIA EN JAVA


Enviado por krusty5 en Mar, 19/07/2011 - 21:03

El algoritmo de bsqueda binaria elimina de la bsqueda la mitad de los elementos que quedan en el array despus de cada comparacin. El array debe estar ordenado previamente, declaramos la variables inicio y fin con la posicin inicial y final del array, en la variable posicin almacenamos el valor del centro del array. En la primera iteracin se evala si la variable posicin coincide con el elemento buscado en ese caso la bsqueda termina y devuelve el resultado, Si el elemento buscado es mayor tomamos el intervalo que va desde el elemento central al final, en caso contrario, tomamos el intervalo que va desde el elemento central hasta el principio del intervalo. Cdigo

import java.util.Arrays; import java.util.Random; import java.util.Scanner; public class BusquedaBinaria { private static int[] array; private static Random rnd = new Random(); public static void crearArray(int tam) { array = new int[tam]; for (int i = 0; i < array.length; i++) { array[i] = rnd.nextInt(90); } Arrays.sort(array); } public static String arrayToString() { String resultado = ""; for (int i = 0; i < array.length; i++) { resultado += array[i] + " "; } return resultado; } public static int buscar(int valor) { int int int int valorBuscar = valor; inicio = 0; fin = array.length - 1; posicion;

while (inicio <= fin) { posicion = (inicio + fin) / 2; if (array[posicion] == valorBuscar) { return posicion; } else if (valorBuscar > array[posicion]) { inicio = posicion + 1; } else { fin = posicion - 1; } }

return -1; } public static void main(String[] args) { Scanner entrada = new Scanner(System.in); int tamArray; int enteroaBuscar=0; int resultado; System.out.println("Escribe un valor para el tamao del array: "); tamArray = entrada.nextInt(); BusquedaBinaria.crearArray(tamArray); System.out.println("Array creado"); System.out.println(BusquedaBinaria.arrayToString()); while (enteroaBuscar != -1) { System.out.println("Introduce un nmero a buscar(-1 para salir):"); enteroaBuscar = entrada.nextInt(); resultado = BusquedaBinaria.buscar(enteroaBuscar); if (resultado == -1) { System.out.println("El entero " + enteroaBuscar + " no se encontro"); } else { System.out.println("El entero " + enteroaBuscar + " se encontro en la posicin " + resultado); } } } }