08 octubre 2007

Ordenando el caos con burbujas...

Cuando estamos trabajando con mucha información, es imposible encontrar lo que ando buscando si no está ordenado. Imagínate tu directorio telefónico si no estuviera ordenado alfabéticamente probablemente jamás lo usarías. Esto sucede con los sistemas informáticos también: no basta guardar todos los datos, hace falta mantenerlos en orden o poder ordenarlos.

Ahorita voy a explicar una manera de ordenar datos. Es el algoritmo menos eficiente, pero el más fácil de entender. Este algoritmo es el de Burbuja (o bubble sort) y lo voy a ilustrar usando arreglos. Una vez que entiendas como funciona con arreglos, no tendrás problemas en implementarlo con diferentes tipos de estructuras, clases, registros, etc. Voy a hacer el código usando Visual Basic 6.0 (que va a ser igual que el 2005) y en C. Con esto creo que no tienen problema en transportar el código a cualquier lenguaje de programación.

El algoritmo funciona de la siguiente manera: primero compara el primer elemento contra los demás (obviamente se va comparando uno por uno, elemento por elemento). Si se encuentra un elemento menor, intercambia el contenido (es decir, asigna a este elemento el valor menor y el valor que tenía lo deja en el elemento donde estaba el valor más pequeño). Una vez terminado de comparar el primer elemento contra todos los demás (se supone que el elemento menor está en la primera posición), hago lo mismo con el siguiente elemento: lo comparo con todos los que siguen y dejo el menor valor (de los que quedan) , y así sucesivamente voy comparando todos los elementos contra todos. Al final del día, debería tener un arreglo ordenado.

Por si te hice bolas, sé que una imagen vale mil palabras y como no pienso escribir mil palabras, mejor hice unos dibujitos para aclarar la situación. Espero que se entienda. Después de la imagen, hacemos el algoritmo en C y Visual Basic. Ahí va la manera en que ordeno el primer elemento...


Ok. Allí está el primer elemento. Ahora voy con el segundo elemento...


Ahora voy con el tercero...


Así me voy ordenando todos, pero para completar el ejercicio, ahí va la manera en que se ordena el cuarto elemento:


Y el quinto...

Y el sexto...

El séptimo y octavo...

Ya no tiene comparar el octavo con el noveno porque se supone que si todos los número están ordenados hasta el octavo elemento, el último debe ser el mayor a todos. El arreglo final, ordenadito y toda la cosa, es así:



¡Listo! Queda un arreglo ordenadito y toda la cosa. Este algoritmo es muy sencillo de entender, sin embargo, es muy ineficiente. La eficiencia de un algoritmo tiene que ver directamente con el número de comparaciones que tiene que hacer y este algoritmo es muy ineficiente porque hace muchísimas.

Ahora, ya entendido el concepto y la manera en que funciona este algoritmo, vamos a mostrar cómo se vería ya en código. Como el lenguaje C es muy simple, primero lo voy a resolver en este lenguaje. Aquí pongo el código y abajo de esta imagen explico que onda.


Le puse comentarios al código con la esperanza que se entienda mejor. De este código, lo interesante, lo que hace el trabajo, son los dos ciclos anidados. El ciclo de "i" se encarga de dejarnos visitar todos los elementos del arreglo y el ciclo "j" nos permite comparar todos los elementos que son mayores de i (o sea, los que faltan por comparar). Si el elemento en la posición j es menor al que está en la posición i, los intercambio (para esto uso una variable k que auxilia en la cambiadera).

Simplemente como comentario cultural, el código en C lo hice usando el compilador Microsoft Visual C++ 6.0, pero como usé el C estándar (ANSI C) debería funcionar con cualquier compilador (bueno, algunos comentarios están en "formato" C++, los que comienzan con dos diagonales invertidas, pero no creo que tengas broncas).

Al ejecutarlo se ve así:


Transportar esta idea a Visual Basic 6.0 es sencillo (y es aún más fácil usar el código de Visual Basic 6 en el 2005). Hice una pequeña aplicación, sencillita, que tiene 10 cajas de texto y dos botones. Un botón ordena los valores de las cajas de texto y el otro finaliza la ejecución del programa. El interfaz se ve así:


El código del programa es ésta:


En éste código, txtNumero es un arreglo de los TextBoxes que están en la pantalla. ¿Algún problema? Recuerda que si te quedaste con dudas, me puedes dejar un comentario e intentaré responderte en cuanto pueda.

Ahora voy a hacer esta misma aplicación en Visual Basic 2005. Es casi igual que en la versión 6, pero de todos modos les muestro la interfaz y luego el código. El gran problema que me trauma de la versión 2005 es que no es posible tener arreglos de controles. Bueno, sí se puede pero es un gran relajo al que prefiero no entrarle. Para saltarme esta bronca, antes de ordenar, copio los valores de las cajas de texto (txtNumero1 a txtNumero10) a un arreglo.


Y aquí les dejo el código de la ventana es ésta:


Por ahorita, esto es todo. Si tienes dudas, déjame un comentario. ¡Hasta la próxima!

31 comentarios:

clau! dijo...

ala.... te juro q te ganast un pedazo de cielo!!!! tu explikción me sirvio de muuuucho!!!! grax!!

clau! dijo...

ala..... t juro q te ganast un pedazo de cielo!!!! tu explikción me sirvio muuuuucho!!! grax!

any:: dijo...

ala enserio este mundo necesitas muuuuuuuchas personas como tu que sepan explicar de esa forma............ mil pero mil gracias!!!!!!!!! con esto muchos nos quitamos un peso de encima!!!!!!!!!!!!!!!!! gracias:::::::

Anónimo dijo...

Muchas Gracias, las explicado a la perfección. Lo que no entiendo es que en un programa me funciona y en el otro no. En el que no me funciona, quiero coger 3 variables que cojo de las lineas de un txt i ordenarlas, pero salen como quieren. Si pudieras ayudarme se agradeceria, Gracias!

Anónimo dijo...

Ya esta solucionado, Gracias por la explicacion!

iasa dijo...

hola!! estoy haciendo el programa en c++; pero no me despliega los datos ordenados si no q desordenados, y lo copie = como estaba el algoritmo de esta pag, que puedo hacr para que me ordene los datos???

Tony Valderrama dijo...

No sé porque no te funciona porque este código lo he probado varias veces. A lo mejor escribiste mal el código. ¿Por qué no lo copias aquí a ver si le atinamos a que tienes mal?

¡Saludos!

iasa dijo...

hola, mira ia lo solucioné!!
Es q lo q paso fue que io puc <= y solo era <.
Gracias de verdad por la explicacion, y solo asi entendi cual era el funcionamiento de este programa con todos esos ejemplos de dibujos, me sirvió de muxoOoO GRACIAS!!!
bye
=o)

Anónimo dijo...

Ho0la profe!!!

La verdad es que le entendí perfectamente a la explicación, aparte de que las imagenes ayudan mucho; creo que es una manera práctica y sencilla para poder ordenar datos, sobre todo arreglos, aunque es verdad que es un método no tan eficiente, porque si tenemos que ordenar muchos datos, si nos tardamos en hacer todas las comparaciones, pero si esta fácil.
Gracias Profe =)

Leslie Diaz Mercado. 4°TIA

Anónimo dijo...

Hola ProF...
en realidad su explicacion me sirvio de mucho ya que lo dice de forma concreta y clara y eso ayuda junto con las imagenes.
Pero espero que no se me dificulte mucho al momento de hacerlo, espero que no..!!
gracias ..
la vd esto de lo las burbujas es sencillo pero quedo mas claro con la informacion

Atte: Jessica Fabiola Sánchez Cuevas

Anónimo dijo...

Que onda tony!!!
bueno pues nomas aqui
pasando para comentarte
sabes se me hace algo
un poco complicado porque
como que es mucho rollo
pero yo creo que si le hechamos
ganas lo entenderemos xD
bueno pues ami la idea no me quedo
del 100% clara creo que le
entendi mas cuando los dibujitos
entraron pero ps nimodo jeje
luego nos tendras que explicar
creo un poco mas general... sale tony me voy y si cumpli con mi tarea...

atte: Sebastian Cervantes

Anónimo dijo...

aun no estoy muy segura de como se hace eso, es medio revoltoso TONyyy!
pero a de ser util, estoy segura :D


ROMINA 4 TIA

Anónimo dijo...

Hola profe :D
pues esto del ordenamiento
burbuja esta muy facil de
entender, y tambien facil de programar
me gusto mucho su explicacion
atte. Monserrat Romero 4TIA

Anónimo dijo...

Profe
Pues esto de los arreglos
se ve muy facil y mas con su
explicacion me quedo mas claro
siento que es algo sencillo
y que igual nos puede servir mucho
espero no se me haga dificil
despues :)
atte:Bernie

JEAP dijo...

Ya decia yo (:
Lo unico que no me apasiona de este
tipo de arreglos ( bubble sort) es
que hace demasiadas comparaciones. Inclusive como que es muy redundante no? :S


¿Podria ser mas rapido y facil con otro tipo de arreglo?

Anónimo dijo...

alo0w toony..!!
bueno poes como veraz oi hazta me preguntaste qe si le estaba entendiendoo.. y es qe estaba tratando de poner tanta atencion qe la verdad me perdi en un momento pero de qe es facil de hacerlo es facil.. espero qe no se me olvide como hacerlo.. =S..
graxie toony..!

Paty Aguilar 4 tia

Anónimo dijo...

hola tonny!!
la explicacion es muy facil de entender ya que con los dibujos te facilita mas todo lo que quieres explicar es muy sencillo y pues un poco largo pero esta bien bueno
tony me voy espero que estes bien bye=D


Mariana Trujillo López 4 tia

Anónimo dijo...

Bueno en el salon me quedo muy claro aunque se repitio mucho XD

y los dibujos ayudan mucho en la explicacion!

Atte: Ricardo Hernández J.

4 TIA!

Anónimo dijo...

öOLaaa tony... bueno pues ammm
la verdad es que ya con los dibujitos si le entendi mejor y pues tambien con la clase de hoy y pues creo que si ayuda porque eso de tener que escribir un codigo demaciado grande como que no se me da, aunque siento que ya que hagamos otro ejercicio me voy a revolver toda pero en fin... haha y pues la de buenas que mi directorio telefonico esta en mi mente porque si estuviera en una libreta no pues ahi si estaria muy muy largo jajaja y no me gustaria usar un algoritmo como para ordenarlo todo jajajaja :)

bueno pues.. ya cumpli con mi tarea ya me voy :D

atte. Paola Negrete Torres 4TIA

Anónimo dijo...

tony =)... graciias por la explikacion del ordenamientoo burbuja.. quedoo muy claro qreo que mas bien sirvee comoo un acomodo pero mas revoltoso no? por que de la misma manera quedan de menor a mayor y alomejor con otro codigo podria hacer lo mismo en menos pasos...
Gracias tony =)
nos vemos en clase
Fernando Luna A.

Anónimo dijo...

hola profe respecto a este tema creo que seria mas eficiente sin tantas complicaciones para los arreglos al hacer ordenamientos,ya que pues no sera un gran revuelto el hacerlo y a traves de ese metodo se nos facilitaria.

Bueno esta interesante este tema n__n
adios profee

Paulina Elizabeth Bolaños Salcedo 4A TIA T/M

Anónimo dijo...

CYNDI CON Y se me facilita el ordenar numeros o cantidades por medio de los arreglos

Anónimo dijo...

hola profe.. pff esto de programacion para mi es un tema muy dificil, no se por que simplemente no se me da.
pero eso no importa por que para eso tengo a uno de los mejores profesores enseñano a la perfeccion...

me fueron de mucha ayuda los diujitos y ademas como ya es costumre siempre hago las tareas al final jeje y pues soy de las ultimas en comentar pero ien dicen q mas vale tarde q nunca.. asi q hoy en la clase explicaste muy bien, me dormi pouito porque tenia sueño pero estube en lo mas importante y le enteni muy bien asy q ya es mas facil saber ordenar los datos con el metodo este de burujas...aunque si es mas entretenido

gracias tony a ver como me va en este tema y cero dudas hasta ahorita ...

graxx
erika estefania perez estrada de 4to. de tia

inguelo dijo...

profe.!! esta increiible su presentacion y pues ya laa habiamos visto en el salon .
es de como rpesentarun arreglo pra qe los numero se vayan acomodando.
primero agarran el primero y compruebaa el program qe sea mnor qe los demas


ingrid guerreroo
un abraziito tonyy.!

Anónimo dijo...

hoOla..!!
Esta muy facil y lo explico de una manera que la verdad se entiene perfectamente y sera de mucha utilidad al hacer programas y no sera tan complicado al ordenar algo..

martha Leticia quintero Castillo
4 TIA

esteban m dijo...

mui tarde toni pero ni bronca o si no pss la neta esta bien facil si le entendi desde la clase que hubo hoi... nadamas me falto ver por completo el codigo pero en fin suerte

Anónimo dijo...

K onda tony.. bueno no habia podido escribir hasta ahorita pero bueno segun lo que vi del tema es que esto lo hace de una forma mas facil y rapida ya que podemos tener los numeros o datos de una forma mejor acomodada.. ya que depende el codigo esto dice si va de mayor a menor o de menor a mayor..

Mario Aguilar 4º TIA

Anónimo dijo...

claudiia sánchez pérez
4 TIA

profe! iia porfin leí lo que ase rato nos avia dejadoh leer! :D
pero ya ve q m confundí de lectura.

Las imagenes son de gran ayuda creeame (:. Y con los arreglos el código no fue tan grande, pero aunque los arreglos no sean 100% fiables si brindan una ayudiita :)

Anónimo dijo...

amigo esta muy bien lo que has hecho pero me gustaria que me explicaras la ordenacion pero solo usando dos caja de texto en donde pida la cantidad de numeros y la otra pida los n numeros
escribeme a mi correo rocki_mbdlcv@hotmail.com

Unknown dijo...

DIOS TE BENDIGA MUCHACHO !!!!!! me has salvado de una jejeje

Gracias por hacer mas facil de entender algo que parecia sencillo y se volvio complicado...

saludos desde Venezuela

Anónimo dijo...

hola profe!!
acabo de leer toda la informacion, me quedo super claro el proceso y los elementos que contiene el algoritmo, igual gracias a las representaciones graficas la explicacion fue mas facil de entender.

Ursula Franco

El Tony y sus ondas...

Related Posts Plugin for WordPress, Blogger...