dietas para adelgazar font: normal normal 13px Arial, Tahoma, Helvetica, FreeSans, sans-serif; color: #ffffff; background: #000000 url(http://www.blogblog.com/1kt/awesomeinc/body_background_dark.png) repeat scroll top left; } html body .content-outer { min-width: 0; max-width: 100%; width: 100%; } a:link { text-decoration: none; color: #888888; } a:visited { text-decoration: none; color: #444444; } a:hover { text-decoration: underline; color: #cccccc; } .body-fauxcolumn-outer .cap-top { position: absolute; z-index: 1; height: 276px; width: 100%; background: transparent url(http://www.blogblog.com/1kt/awesomeinc/body_gradient_dark.png) repeat-x scroll top left; _background-image: none; } /* Columns ----------------------------------------------- */ .content-inner { padding: 0; } .header-inner .section { margin: 0 16px; } .tabs-inner .section { margin: 0 16px; } .main-inner { padding-top: 30px; } .main-inner .column-center-inner, .main-inner .column-left-inner, .main-inner .column-right-inner { padding: 0 5px; } *+html body .main-inner .column-center-inner { margin-top: -30px; } #layout .main-inner .column-center-inner { margin-top: 0; } /* Header ----------------------------------------------- */ .header-outer { margin: 0 0 0 0; background: transparent none repeat scroll 0 0; } .Header h1 { font: normal bold 40px Arial, Tahoma, Helvetica, FreeSans, sans-serif; color: #ffffff; text-shadow: 0 0 -1px #000000; } .Header h1 a { color: #ffffff; } .Header .description { font: normal normal 14px Arial, Tahoma, Helvetica, FreeSans, sans-serif; color: #ffffff; } .header-inner .Header .titlewrapper, .header-inner .Header .descriptionwrapper { padding-left: 0; padding-right: 0; margin-bottom: 0; } .header-inner .Header .titlewrapper { padding-top: 22px; } /* Tabs ----------------------------------------------- */ .tabs-outer { overflow: hidden; position: relative; background: #141414 none repeat scroll 0 0; } #layout .tabs-outer { overflow: visible; } .tabs-cap-top, .tabs-cap-bottom { position: absolute; width: 100%; border-top: 1px solid #222222; } .tabs-cap-bottom { bottom: 0; } .tabs-inner .widget li a { display: inline-block; margin: 0; padding: .6em 1.5em; font: normal bold 14px Arial, Tahoma, Helvetica, FreeSans, sans-serif; color: #ffffff; border-top: 1px solid #222222; border-bottom: 1px solid #222222; border-left: 1px solid #222222; } .tabs-inner .widget li:last-child a { border-right: 1px solid #222222; } .tabs-inner .widget li.selected a, .tabs-inner .widget li a:hover { background: #444444 none repeat-x scroll 0 -100px; color: #ffffff; } /* Headings ----------------------------------------------- */ h2 { font: normal bold 14px Arial, Tahoma, Helvetica, FreeSans, sans-serif; color: #ffffff; } /* Widgets ----------------------------------------------- */ .main-inner .section { margin: 0 27px; padding: 0; } .main-inner .column-left-outer, .main-inner .column-right-outer { margin-top: 0; } #layout .main-inner .column-left-outer, #layout .main-inner .column-right-outer { margin-top: 0; } .main-inner .column-left-inner, .main-inner .column-right-inner { background: transparent none repeat 0 0; -moz-box-shadow: 0 0 0 rgba(0, 0, 0, .2); -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, .2); -goog-ms-box-shadow: 0 0 0 rgba(0, 0, 0, .2); box-shadow: 0 0 0 rgba(0, 0, 0, .2); -moz-border-radius: 0; -webkit-border-radius: 0; -goog-ms-border-radius: 0; border-radius: 0; } #layout .main-inner .column-left-inner, #layout .main-inner .column-right-inner { margin-top: 0; } .sidebar .widget { font: normal normal 14px Arial, Tahoma, Helvetica, FreeSans, sans-serif; color: #ffffff; } .sidebar .widget a:link { color: #888888; } .sidebar .widget a:visited { color: #444444; } .sidebar .widget a:hover { color: #cccccc; } .sidebar .widget h2 { text-shadow: 0 0 -1px #000000; } .main-inner .widget { background-color: #141414; border: 1px solid #222222; padding: 0 15px 15px; margin: 20px -16px; -moz-box-shadow: 0 0 0 rgba(0, 0, 0, .2); -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, .2); -goog-ms-box-shadow: 0 0 0 rgba(0, 0, 0, .2); box-shadow: 0 0 0 rgba(0, 0, 0, .2); -moz-border-radius: 0; -webkit-border-radius: 0; -goog-ms-border-radius: 0; border-radius: 0; } .main-inner .widget h2 { margin: 0 -15px; padding: .6em 15px .5em; border-bottom: 1px solid #000000; } .footer-inner .widget h2 { padding: 0 0 .4em; border-bottom: 1px solid #000000; } .main-inner .widget h2 + div, .footer-inner .widget h2 + div { border-top: 1px solid #222222; padding-top: 8px; } .main-inner .widget .widget-content { margin: 0 -15px; padding: 7px 15px 0; } .main-inner .widget ul, .main-inner .widget #ArchiveList ul.flat { margin: -8px -15px 0; padding: 0; list-style: none; } .main-inner .widget #ArchiveList { margin: -8px 0 0; } .main-inner .widget ul li, .main-inner .widget #ArchiveList ul.flat li { padding: .5em 15px; text-indent: 0; color: #666666; border-top: 1px solid #222222; border-bottom: 1px solid #000000; } .main-inner .widget #ArchiveList ul li { padding-top: .25em; padding-bottom: .25em; } .main-inner .widget ul li:first-child, .main-inner .widget #ArchiveList ul.flat li:first-child { border-top: none; } .main-inner .widget ul li:last-child, .main-inner .widget #ArchiveList ul.flat li:last-child { border-bottom: none; } .post-body { position: relative; } .main-inner .widget .post-body ul { padding: 0 2.5em; margin: .5em 0; list-style: disc; } .main-inner .widget .post-body ul li { padding: 0.25em 0; margin-bottom: .25em; color: #ffffff; border: none; } .footer-inner .widget ul { padding: 0; list-style: none; } .widget .zippy { color: #666666; } /* Posts ----------------------------------------------- */ body .main-inner .Blog { padding: 0; margin-bottom: 1em; background-color: transparent; border: none; -moz-box-shadow: 0 0 0 rgba(0, 0, 0, 0); -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, 0); -goog-ms-box-shadow: 0 0 0 rgba(0, 0, 0, 0); box-shadow: 0 0 0 rgba(0, 0, 0, 0); } .main-inner .section:last-child .Blog:last-child { padding: 0; margin-bottom: 1em; } .main-inner .widget h2.date-header { margin: 0 -15px 1px; padding: 0 0 0 0; font: normal normal 14px Arial, Tahoma, Helvetica, FreeSans, sans-serif; color: #666666; background: transparent none no-repeat scroll top left; border-top: 0 solid #222222; border-bottom: 1px solid #000000; -moz-border-radius-topleft: 0; -moz-border-radius-topright: 0; -webkit-border-top-left-radius: 0; -webkit-border-top-right-radius: 0; border-top-left-radius: 0; border-top-right-radius: 0; position: static; bottom: 100%; right: 15px; text-shadow: 0 0 -1px #000000; } .main-inner .widget h2.date-header span { font: normal normal 14px Arial, Tahoma, Helvetica, FreeSans, sans-serif; display: block; padding: .5em 15px; border-left: 0 solid #222222; border-right: 0 solid #222222; } .date-outer { position: relative; margin: 30px 0 20px; padding: 0 15px; background-color: #141414; border: 1px solid #222222; -moz-box-shadow: 0 0 0 rgba(0, 0, 0, .2); -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, .2); -goog-ms-box-shadow: 0 0 0 rgba(0, 0, 0, .2); box-shadow: 0 0 0 rgba(0, 0, 0, .2); -moz-border-radius: 0; -webkit-border-radius: 0; -goog-ms-border-radius: 0; border-radius: 0; } .date-outer:first-child { margin-top: 0; } .date-outer:last-child { margin-bottom: 20px; -moz-border-radius-bottomleft: 0; -moz-border-radius-bottomright: 0; -webkit-border-bottom-left-radius: 0; -webkit-border-bottom-right-radius: 0; -goog-ms-border-bottom-left-radius: 0; -goog-ms-border-bottom-right-radius: 0; border-bottom-left-radius: 0; border-bottom-right-radius: 0; } .date-posts { margin: 0 -15px; padding: 0 15px; clear: both; } .post-outer, .inline-ad { border-top: 1px solid #222222; margin: 0 -15px; padding: 15px 15px; } .mobile .post-outer, .mobile .inline-ad { padding: 5px 15px; } .post-outer { padding-bottom: 10px; } .post-outer:first-child { padding-top: 0; border-top: none; } .post-outer:last-child, .inline-ad:last-child { border-bottom: none; } .post-body { position: relative; } .post-body img { padding: 8px; background: #222222; border: 1px solid transparent; -moz-box-shadow: 0 0 0 rgba(0, 0, 0, .2); -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, .2); box-shadow: 0 0 0 rgba(0, 0, 0, .2); -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } h3.post-title, h4 { font: normal bold 22px Arial, Tahoma, Helvetica, FreeSans, sans-serif; color: #ffffff; } h3.post-title a { font: normal bold 22px Arial, Tahoma, Helvetica, FreeSans, sans-serif; color: #ffffff; } h3.post-title a:hover { color: #cccccc; text-decoration: underline; } .post-header { margin: 0 0 1em; } .post-body { line-height: 1.4; } .post-outer h2 { color: #ffffff; } .post-footer { margin: 1.5em 0 0; } #blog-pager { padding: 15px; font-size: 120%; background-color: #141414; border: 1px solid #222222; -moz-box-shadow: 0 0 0 rgba(0, 0, 0, .2); -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, .2); -goog-ms-box-shadow: 0 0 0 rgba(0, 0, 0, .2); box-shadow: 0 0 0 rgba(0, 0, 0, .2); -moz-border-radius: 0; -webkit-border-radius: 0; -goog-ms-border-radius: 0; border-radius: 0; -moz-border-radius-topleft: 0; -moz-border-radius-topright: 0; -webkit-border-top-left-radius: 0; -webkit-border-top-right-radius: 0; -goog-ms-border-top-left-radius: 0; -goog-ms-border-top-right-radius: 0; border-top-left-radius: 0; border-top-right-radius-topright: 0; margin-top: 1em; } .blog-feeds, .post-feeds { margin: 1em 0; text-align: center; color: #ffffff; } .blog-feeds a, .post-feeds a { color: #888888; } .blog-feeds a:visited, .post-feeds a:visited { color: #444444; } .blog-feeds a:hover, .post-feeds a:hover { color: #cccccc; } .post-outer .comments { margin-top: 2em; } /* Footer ----------------------------------------------- */ .footer-outer { margin: -0 0 -1px; padding: 0 0 0; color: #ffffff; overflow: hidden; } .footer-fauxborder-left { border-top: 1px solid #222222; background: #141414 none repeat scroll 0 0; -moz-box-shadow: 0 0 0 rgba(0, 0, 0, .2); -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, .2); -goog-ms-box-shadow: 0 0 0 rgba(0, 0, 0, .2); box-shadow: 0 0 0 rgba(0, 0, 0, .2); margin: 0 -0; } /* Mobile ----------------------------------------------- */ *+html body.mobile .main-inner .column-center-inner { margin-top: 0; } .mobile .main-inner { padding-top: 0; } .mobile .main-inner .widget { padding: 0 0 15px; } .mobile .main-inner .widget h2 + div, .mobile .footer-inner .widget h2 + div { border-top: none; padding-top: 0; } .mobile .footer-inner .widget h2 { padding: 0.5em 0; border-bottom: none; } .mobile .main-inner .widget .widget-content { margin: 0; padding: 7px 0 0; } .mobile .main-inner .widget ul, .mobile .main-inner .widget #ArchiveList ul.flat { margin: 0 -15px 0; } .mobile .main-inner .widget h2.date-header { right: 0; } .mobile .date-header span { padding: 0.4em 0; } .mobile .date-outer:first-child { margin-bottom: 0; border: 1px solid #222222; -moz-border-radius-topleft: 0; -moz-border-radius-topright: 0; -webkit-border-top-left-radius: 0; -webkit-border-top-right-radius: 0; -goog-ms-border-top-left-radius: 0; -goog-ms-border-top-right-radius: 0; border-top-left-radius: 0; border-top-right-radius: 0; } .mobile .date-outer { margin: 0; padding: 10px; border-color: #222222; border-width: 0 1px 1px; } .mobile .date-outer:last-child { margin-bottom: 0; } .mobile .main-inner { padding: 20px 10px; } .mobile .header-inner .section { margin: 0; } .mobile .tabs-inner .section { margin: 0 10px; } .mobile .main-inner .widget h2 { margin: 0; padding: 0; } .mobile .main-inner .widget h2.date-header span { padding: 0 10px; } .mobile .main-inner .widget .widget-content { margin: 0; padding: 7px 0 0; } .mobile .main-inner .column-center-inner, .mobile .main-inner .column-left-inner, .mobile .main-inner .column-right-inner { padding: 0; } .mobile .main-inner .column-left-inner, .mobile .main-inner .column-right-inner { background: transparent none repeat 0 0; -moz-box-shadow: none; -webkit-box-shadow: none; -goog-ms-box-shadow: none; box-shadow: none; } .mobile .date-posts { margin: 0; padding: 0; } .mobile .post-outer { margin: 0; padding: 10px; } .mobile .footer-fauxborder-left { margin: 0; } .mobile .main-inner .section:last-child .Blog:last-child { margin-bottom: 0; } .mobile .mobile-link-button { background: #444444 none repeat-x scroll 0 -100px; } .mobile-link-button a:link, .mobile-link-button a:visited { color: #ffffff; } -->

miércoles, 17 de noviembre de 2010

Ordenación por burbuja

Una manera simple de expresar el ordenamiento de burbuja en pseudocódigo es la siguiente:


En este algoritmo se trata de ordenar una lista de valores: a, de n términos numerados del termino 0 al n-1, consta de dos bucles anidados uno con el índice i, que acota el recorrido de la burbuja en sentido inverso de 2 a n, y un segundo bucle con el índice j, con un recorrido desde 0 hasta n-i, para cada iteración del primer bucle, que indica el lugar de la burbuja.
La burbuja son dos términos de la lista seguidos, j y j+1, que se comparan, si el primero es menor que el segundo sus valores se intercambian.
Esta comparación se repite en el centro de los dos bucles, dando lugar a la postre a una lista ordenada, puede verse que el número de repeticiones sola depende de n, y no del orden de los términos, esto es si pasamos al algoritmo una lista ya ordenada, realizara todas las comparaciones exactamente igual que para una lista no ordenada, esta es una característica de este algoritmo, luego veremos una variante que evita este problema.
Para comprender el funcionamiento, veamos un ejemplo sencillo:
Partimos de una lista de números que hay que ordenar:


Podemos ver que la lista tiene cinco términos, luego:
n = 5 
El indice i hará un recorrido de 2 hasta n:





Que en este caso será de 2 a 5. Para cada uno de los valores de i, j tomara sucesivamente los valores de 0 hasta n-i:

Para cada valor de j, obtenido en ese orden, se compara el valor del índice j con el siguiente:


Si el termino j es menor, en su caso podría se mayor, que el termino j+1, los valores se permutan, en caso contrario se continúa con la iteración.

Para el caso del ejemplo, tenemos que:
 n=5 
Para la primera iteración del primer bucle:
i=2
y j tomara los valores de 0 hasta 3:


Cuando j vale 0, se comparan a0a1 el 55 y el 86, dado que 55 <> 48, se permutan, dando lugar a una nueva lista.
Ahora j vale 1 y se comparan a1a2 el 86 y el 48 Como 86 > 48, se permutan, dando lugar a una nueva lista.
Se repite el proceso hasta que j valga 3, dando lugar a una lista parcialmente ordenada, podemos ver que el termino de mayor valor esta en el lugar más alto.

Ahora i vale 3, y j hará un recorrido de 0 a 2.
Primero j vale 0, se comparan , el 55 y el 48, como 55 > 48 se permutan dando lugar a la nueva lista.
Para j = 1 se compara el 55 con el 16 y se cambian de orden.
Para j = 2 se compara el 55 y el 82 y se dejan como están, finalizando el bucle con una lista mejor ordenada, puede verse que los dos valores más altos ya ocupan su lugar. No se ha realizado ninguna comparación con el termino cuarto, dado que ya se sabe que después del primer ciclo es el mayor de la lista.
El algoritmo consiste en comparaciones sucesivas de dos términos consecutivos, ascendiendo de abajo a arriba en cada iteración, como la ascensión de las burbujas de aire en el agua, de ahí el nombre del procedimiento, en la primera iteración el recorrido ha sido completo, en el segundo se ha dejado él ultimo termino, al tener ya el mayor de los valores, en los sucesivos sé ira dejando re realizar las ultimas comparaciones, como se puede ver.

Ahora ya i vale 4 y j recorrerá los valores de 0 a 1.
Cuando j vale 0, se comparan esto es el 48 y el 16 dado que 48 es mayor que 16 se permutan los valores, dando lugar a una lista algo más ordenada que la anterior, desde esta nueva ordenación, j pasa a valer 1, con lo que se comparan los términos el 48 y el 55 que quedan en el mismo orden.
En este caso la burbuja ha ascendido menos que en los casos anteriores, y la lista esta ya ordenada, pero el algoritmo tendrá que completarse, realizando una ultima iteración.
Hay que tener en cuenta que el bucle para realiza un número fijo de repeticiones y para finalizar tendrán que completarse, aun en el caso extremo, de que la lista estaría previamente ordenada.
Por ultimo i vale 5 y j solo puede vale 0, con lo que solo se realizara una comparación de el 16 y el 48, que ya están ordenados y se dejan igual.

Los bucles finalizan y también el procedimiento, dejando la lista ordenada.
Una variante que finaliza en caso de que la lista este ordenada, puede ser la siguiente, empleando un centinela ordenado, que detecta que no se ha modificado la lista en un recorrido de la burbuja, y que por tanto la lista ya esta ordenada, finalizando.

No hay comentarios:

Publicar un comentario