Está en la página 1de 9

Despus del montn de cdigo del otro da, intentaremos que este paper sea un poco mas tranquilo.

Veremos una de las esctructuras de datos mas importantes, los vectores, tambin llamados arreglos o arrays. Sirven para almacenar datos de manera ordenada, influye la posicion, y homogneos, es decir, todos del mismo tipo. Que quieres almacenar ! edades, "! matriculas o los datos de #$ alumnos, pues no tienes que usar ! variables, usas un vector con ese numero de posiciones y que almacene enteros, strings u ob%etos de la clase alumno respectivamente.

&odo vector tiene dos caracteristicas importantes' su tipo y su longitud. (l tipo de un vector es cualquier tipo de dato, sea simple o estructurado, pero es siempre el mismo para todos los elementos de cada posicion de dicho vector. )a longitud de un vector es la cantidad de elementos que ese vector puede almacenar. *ay tres formas de declarar e iniciali+ar un array en %ava' ,rimero declaramos nuestra variable de tipo array %unto con el tipo de dato que va a almacenar, y despus, no necesariamente en la siguiente lnea pero s antes de usarlo, creamos nuestro array con un n-mero determinado de posiciones ./$ en este caso0 y lo referenciamos con nuestra variable.

Si queremos hacer todo lo anterior a la ve+ podemos hacerlo en la misma linea' ,odemos crear e iniciali+ar un vector en la misma lnea tambien, el tipo dato tiene que ser el tipo de los elementos introducidos y el tama1o no hace falta, ya que viene implicito. 2niciali+acion o asignacion de valores de un vector.

,odemos hacerlo posicion a posicion, recorriendo el array con un vector'

3 todo a la ve+'

,ara conocer la longitud de un vector se utili+a un mtodo que no recibe par4metros llamado length, por tanto, la sinta5is es' (sta e5presin devuelve un entero' nombreVector.length.0 ,or e%emplo podramos almacenar en una variable a, el tama1o del array b'

6onocer el tama1o de un array es -til para muchas cosas' buscar algun elemento dentro del array, modificar algun elemento dentro del array, insertar un elemento, borrarlo... 3 incluso simplemente por saber su valor y hacer c4lculos con l.

7a que estamos hablando de esto.. Vamos a hacer una b-squeda dentro de un vector. )o primero es declarar e iniciali+ar el vector como hicimos antes'

7a con nuestro vector declarado e iniciali+ado vamos a ver si contiene el elemento #".. 7 en qu posicin se encuentra'

6omo veis los vectores son un tipo de datos en el cual los elementos se disponen en secuencia. ,odemos acceder a ellos a travs de una b-squeda secuencial, o cualquier otro mtodo de b-squeda valindonos de las posiciones.

3tro tipo de b-squeda que podemos implementar a la hora de recorrer un vector es la b-squeda binaria. )a b-squeda binaria es un tipo de b-squeda que solamente se puede aplicar cuando los elementos est4n ordenados de alguna manera, ya sea de manera ascendente o descendente. (l procedimiento a seguir cuando hacemos una b-squeda binaria es el siguiente' ,osicionar en el final del vector una variable llamada 8mayor8, por poner un e%emplo. ,osicionar en el inicio del vector una variable llamada 8menor8. ,osicionar en el medio del vector a la variable 8medio8. 9hora que podemos ver el valor del elemento del medio, podemos saber si es mayor, menor o igual al elemento que estamos buscando. Si es mayor descartamos todos los elementos que hay desde el inicio hasta el medio, puesto que ya sabemos que el elemento no se va a encontrar all. Si fuese menor, descartaramos los que est4n desde el medio hasta el final y si lo encontrarmos.. entonces ya de%amos de buscar. (l algoritmo de la b-squeda binaria continua con el vector ya acotado, recalculando el medio y procediendo hasta encontrar el elemento.

&odo esto lo podemos ver mucho mas facil dibu%ando un vector en un papel y haciendo pruebas. 3 incluso buscando una palabra en un diccionario.

2magina que buscas la palabra chori+o en una vector de palabras ordenadas alfabticamente. Vemos cu4l es la palabra que est4 en el centro del array y nos sale 8martillo8. (ntonces ya sabemos que chori+o est4 antes que 8martillo8 y descartamos la otra mitad del array.

(sto es mucho menos costoso que hacer una b-squeda secuencial, mirando palabra a palabra pero nos e5ige que el vector est ordenado. (5isten muchos otros algoritmos de b-squeda, e incluso se pueden combinar unos con otros y hacer nuestro propio algoritmo.

(ste sera el cdigo de un mtodo en %ava que devuelve la posicin del elemento que se busca en un vector de entero utili+ando el algortmo de b-squeda binaria, en caso de no encontrarlo nos devuelve una posicin inv4lida .:#0.

3tra de las operaciones que podemos aplicarle a un vector es la ordenacin, donde uno de los algoritmos mas conocidos es el de la burbu%a. (ste algoritmo funciona de la siguiente manera'

2magina que tienes un montn de libros desordenados en tu casa y los quieres ordenar por ttulo. 9plicando el mtodo de la burbu%a iras desde el principio de tu coleccin de linbros cogindolos de dos en dos y mirando cu4l va antes y cu4l despus. 2ntercambiando sus posiciones. De forma que repitiendo esta operacin varias veces pasando por toda la coleccin llega un momento en el que ya no haces ningun intercambio porque los libros ya est4n ordenados por ttulo.

(ste algoritmo, es decir, este con%unto de pasos ordenados, es una buena manera de ordenar un vector. Vamos a verlo en cdigo.

)o primero, ya que vamos a intercambiar elementos dos a dos, sera programar nuestro mtodo intercambiar'

(n el algoritmo de intercambio pedimos que nos pasen el vector al que le estamos aplicando la burbu%a y adememas las posiciones 8a8 y 8b8 que queremos intercambiar. ,ara ello utili+aremos una variable au5iliar 8au58 que nos sirve para almacenar temporalmente el elemento de la posicin 8a8 para reali+ar el intercambio.

7a con el algoritmo intercambiar preparado, solo nos queda programar en %ava el mtodo de la burbu%a como lo e5plicamos antes en nuestro e5perimento mental 5D

6omo vemos, en el cdigo utili+amos un booleano que almacene si hubo intercambios o no, para finali+ar cuando no los haya. 9 este sistema de utili+ar booleanos para que decidan cuando salir de un bucle se le conoce como banderas o flags.

(5isten mas algoritmos de ordenacin como el quic;sort, mergesort... <n montn de soluciones matem4ticas para resolver el problema de la ordenacin, dependiendo de lo que nos pidan ordenar siempre habr4 uno que nos interese mas que el resto.

3tra de las cosas que nos pueden interesar a la hora de tratar con vectores es insertar un elemento. De nuevo nos imaginamos que queremos poner un libro nuevo en nuestra biblioteca de libros ordenados por ttulo. )o que hacemos es ver si cabe en nuestra estantera .el vector0, y si cabe, ir viendo uno por uno desde el principio, si al colocarlo a continuacin queda ordenada nuestra coleccin. <na ve+ insertado contamos que la coleccin tiene un elemento mas .aumenta el numero de elemento que contiene el vector0. 3%o porque cuando insertamos en un vector, el elemento ocupa la posicin de otro que ya haba, por lo que tenemos que correr todos los elemento una posicin a la derecha.

3tra manera mas sencilla sera insertar desordenado. ,ara ello simplemente lo insertamos al final, comprobando que quepa y modificando el tama1o del vector una ve+ insertado. De esta manera nos evitamos tener que correr elementos a la derecha para hacer hueco al nuevo elemento. =Desventa%a> ?uestro vector no queda ordenado.

)uego tambien podemos eliminar la primera coincidencia que nos topemos de un elemento dado, o todas las coincidencias con ese elemento dado. (sto se hace buscando el elemento en el vector y corriendo los elementos que quedan a la derecha una posicin hacia la i+quierda. 9l terminar decrementamos el numero de elementos que contiene el vector en uno y fin del algoritmo.

(stas fueron un montn de operaciones interesantes con vectores. ,ero cuando parece que ya hemos terminado de ver lo interesante que pueden llegar a resultar los vectores ri+amos un poco mas el ri+o y nos encontramos que podemos tener vectores de vectores. (s decir, un vector en el cual, cada posicin contenga a otro vector. ?os lo podemos imaginar mentalmente al array multidimensional como una tabla de elementos. Donde hay posiciones 8i8, que son las filas, y posiciones 8%8 que son las columnas' i#,%# i#,%$ i#,%/ i$,%# i$,%$ i$,%/ i/,%# i/,%$ i/,%/

9 los vectores que contienen otros vectores se les llama arrays multidimensionales o arreglos multidimensionales.

(ntendiendo los arrays o arreglos monodimensionales, es muy sencillo entender estos otros ya que el concepto es e5actamente el mismo. ,odemos declarar un array multidimensional haciendo con la siguiente sinta5is'

6omo vis se hace e5actamente igual que con los arrays monodimensionales o vectores. 7 para darle tama1o para poder hacer uso del array multidimensional tambien se hace muy muy parecido sint4cticamente a como lo hacamos antes con los vectores'

7a tenemos nuestro array multidimensional o arreglo llamado tabla con un tama1o de @5A. (s decir una tabla que contiene /B posiciones. &odo esto lo podramos haber hecho en un solo paso, para declarar y dar tama1o no tiene ciencia ninguna'

6on esto creamos el array tabla de 5$" en una sola lnea.

,ara traba%ar con arrays multidimensionales simplemente debemos saber que las filas las recorremos con un for e5terno y las columnas con un for interno de la siguiente manera'

6omo veis la i va de ! hasta B inclusive, recorriendo las columnas desde su posicin % cero hasta % veinticuatro.

)o que hemos visto de b-squeda, insercin y borrado es aplicable tambien a los arrays multidimensionales. Simplemente imagina todo lo que puedes hacer con una tabla. 6on lo que sabes podras ya porgramar algun %uego, como el / en raya en un array de /5/.

(n este taller hemos visto lo que son los arrays o arreglos y los algoritmos mas habituales que nos podemos encontrar en estas estructuras de datos.

&raba%aremos sobre este taller en el foro de underc!de, <n saludo' Sna;ingCa5 y Dutierre+EB