Вы находитесь на странице: 1из 11

c 

   
 
^

c 
^

Este es el algoritmo más sencillo probablemente. Ideal para empezar. Consiste en ciclar
repetidamente a través de la lista, comparando elementos adyacentes de dos en dos. Si un
elemento es mayor que el que está en la siguiente posición se intercambian. ¿Sencillo no?

  

 
^
Tabla de variables

  


lista Cualquiera Lista a ordenar


TAM Constante entera Tamaño de la lista
i Entero Contador
j Entero Contador
temp El mismo que los elementos de la lista Para realizar los intercambios
‘
‘‘‘‘ ‘‘ ‘
‘ ‘
‘‘‘‘‘‘‘‘‘‘‘‘‘
‘‘ ‘ ‘
‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘ ‘
‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘
‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘ ‘
‘‘‘‘ ‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘ ‘‘‘
‘

-  

Vamos a ver un ejemplo. Esta es nuestra lista:

4-3-5-2-1

Tenemos 5 elementos. Es decir, TAM toma el valor 5. Comenzamos comparando el


primero con el segundo elemento. 4 es mayor que 3, así que intercambiamos. Ahora
tenemos:
-- -5-2-1

Ahora comparamos el segundo con el tercero: 4 es menor que 5, así que no hacemos nada.
Continuamos con el tercero y el cuarto: 5 es mayor que 2. Intercambiamos y obtenemos:

3-4---1

Comparamos el cuarto y el quinto: 5 es mayor que 1. Intercambiamos nuevamente:

3-4-2-c-

Repitiendo este proceso vamos obteniendo los siguientes resultados:

3-2-1-4-5

2-1-3-4-5

1-2-3-4-5

   

^

Se pueden realizar algunos cambios en este algoritmo que pueden mejorar su rendimiento.

‘ Si observas bien, te darás cuenta que en cada pasada a través de la lista un elemento
va quedando en su posición final. Si no te queda claro mira el ejemplo de arriba. En
la primera pasada el 5 (elemento mayor) quedó en la última posición, en la segunda
el 4 (el segundo mayor elemento) quedó en la penúltima posición. Podemos evitar
hacer comparaciones innecesarias si disminuimos el número de éstas en cada
pasada. Tan sólo hay que cambiar el ciclo interno de esta manera:

for (j=0; j<TAM - ; j++)

‘ Puede ser que los datos queden ordenados antes de completar el ciclo externo.
Podemos modificar el algoritmo para que verifique si se han realizado intercambios.
Si no se han hecho entonces terminamos con la ejecución, pues eso significa que los
datos ya están ordenados. Te dejo como tarea que modifiques el algoritmo para
hacer esto å .
‘ tra forma es ir guardando la última posición en que se hizo un intercambio, y en la
siguiente pasada sólo comparar hasta antes de esa posición.

 !"  


 

^
ste es el análisis para la versión no optimizada del algoritmo:

‘ Estabilidad: Este algoritmo nunca intercambia registros con claves iguales. Por lo
tanto es | |.
‘ Requerimientos de Memoria: Este algoritmo sólo requiere de una variable adicional
para realizar los intercambios.
‘ Tiempo de Ejecución: El ciclo interno se ejecuta  veces para una lista de n
elementos. El ciclo externo también se ejecuta  veces. Es decir, la complejidad es n
* n = (). El comportamiento del caso promedio depende del orden de entrada de
los datos, pero es sólo un poco mejor que el del peor caso, y sigue siendo ().

# å

‘ âácil implementación.
‘ ho requiere memoria adicional.

$ å

‘ Muy lento.
‘ Realiza numerosas comparaciones.
‘ Realiza numerosos intercambios.

Este algoritmo es uno de los más pobres en rendimiento. Si miras la demostración te darás
cuenta de ello. ho es recomendable usarlo. Tan sólo está aquí para que lo conozcas, y
porque su sencillez lo hace bueno para empezar. Ya veremos otros mucho mejores. Ahora
te recomiendo que hagas un programa y lo pruebes. Si tienes dudas mira el programa de
ejemplo.

http://c.conclase.net/orden/?cap=burbuja

!
 
 

Bubble Sort recorre el arreglo intercambiando los elementos adyacentes que estén
desordenados. Recorre el arreglo tantas veces hasta que ya no haya cambios. Prácticamente
lo que hace es tomar el elemento mayor y lo coloca en las últimas posiciones o tomar el
menor y colocarlo en las primeras posiciones.

%&'()

ALGRITM BURBUJA

IhICI

EhTER X, Z, ARREGL h

Xß0
MIEhTRAS(X < h)

Zßh

MIEhTRAS(Z >= 0)

SI(ARREGL Z < ARREGL Z-1)

IhTERCAMBI(ARREGL Z,ARREGL Z-1)

ZßZ±1

XßX+1

âIh

'() & **

void burbuja(void)

int x, z, aux, ARREGL h;

x = 0;

while(x < h)

z = h;

while(z >= 0)
{

if(ARREGL z < ARREGL z - 1)

aux = ARREGL z;

ARREGL z = ARREGL z - 1;

ARREGL z - 1 = aux;

z--;

x++;

http://www.monografias.com/trabajos32/algoritmos-de-ordenamiento/algoritmos-de-
ordenamiento.shtml#burbuja


  å El ciclo interno se ejecuta n veces. El ciclo externo también se
ejecuta n veces, la complejidad es n * n = (n2). El comportamiento del caso promedio
depende del orden de entrada de los datos, pero es sólo un poco mejor que el del peor caso,
y sigue siendo (n2).

&  å ho intercambia registros con claves iguales.

# å

‘ âácil implementación.
‘ ho requiere memoria adicional.

$ å

‘ Muy lento.
‘ Muchas comparaciones.
‘ Muchos intercambios.

este es un ejemplo de metodo burbuja en C++ , compilado en Dev C++ , es un sencillo
algoritmo de ordenamiento. âunciona revisando cada elemento de la lista que va a ser
ordenada con el siguiente, intercambiándolos de posición si están en el orden equivocado.
Es necesario revisar varias veces toda la lista hasta que no se necesiten más 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 pequeñas
"burbujas". También es conocido como el método del intercambio directo.

Dado que solo usa comparaciones para operar elementos, se lo considera un algoritmo de
comparación, siendo el más sencillo de implementar.

C++:

‘$!"#$‘ ‘
‘‘‘
‘‘#!%!"‘$‘
‘‘‘
‘!‘!&‘
‘‘‘
'‘"# (‘ $‘)#*#‘!‘+ ‘€ ‘,,-‘€(‘
.‘"# (‘ #/‘ !‘0#1‘€€(‘
-‘‘‘
‘ ‘‘‘‘,,$"‘‘%‘
‘ ‘‘‘‘!‘%‘‘& 2 2222-2 2.22'22 3‘
,,%‘$‘ ‘!‘
‘ ‘‘
‘ ‘‘‘‘,,$""!‘$‘#!‘1*‘‘4‘‘
1*‘‘‘*#"‘
‘ ‘‘‘‘!‘2‘2‘‘
‘ ‘‘
‘ ‘‘‘‘,,‘‘%‘"!‘‘1‘!"‘
'‘ ‘‘
.‘ ‘‘‘‘"# (%‘!‘$‘$!( !$‘
-‘ ‘‘‘‘"# !$‘
‘ ‘‘‘‘"# !$‘
 ‘ ‘‘
‘ ‘‘‘‘‘‘‘‘‘‘‘ ‘ &‘
‘ ‘‘
‘ ‘‘‘‘‘‘‘‘"# (%( ‘ (‘‘
( % !$‘
‘ ‘‘
 ‘ ‘‘‘‘‘‘‘‘3‘
'‘ ‘‘
.‘ ‘‘
-‘ ‘‘‘‘,,$#‘‘‘%‘$!$ ‘
‘ ‘‘
 ‘ ‘‘‘‘"# !$‘
‘ ‘‘‘‘"# !$‘
‘ ‘‘‘‘"# (%‘$#‘$‘
$!( !$‘
‘ ‘‘‘‘"# !$‘
‘ ‘‘‘‘"# !$‘
 ‘ ‘‘
'‘ ‘‘‘‘,,$!‘‘!‘$‘‘%‘$‘
!‘‘4‘‘
.‘ ‘‘‘‘,,5‘‘"$‘$‘%‘"!‘$‘
*#"‘((‘
-‘ ‘‘
‘ ‘‘
 ‘ ‘‘‘‘‘‘ ‘‘ ‘ ‘&‘
‘ ‘‘
‘ ‘‘‘‘‘‘‘‘‘‘‘‘ ‘‘‘‘ &‘
‘ ‘‘
‘ ‘‘‘‘' ‘
 ‘ ‘‘‘‘ ‘   ‘ ‘ ‘
‘
‘‘‘
 ‘‘ ‘ ‘ ‘ ‘ ‘
'‘ ‘‘‘‘
 ‘ ‘
 ‘
‘ ‘
 ‘ ‘ ‘
 ‘ ‘  ‘
‘ ‘ ‘
.‘ ‘‘‘‘ '‘
-‘ ‘‘
‘ ‘‘‘‘‘‘‘‘‘‘‘‘%‘%‘ ‘ &‘
 ‘ ‘‘
‘ ‘‘‘‘' ‘
‘ ‘‘‘‘ ‘ ‘
  ‘‘

‘
‘ ‘ 
‘
 ‘  ‘
‘ ‘‘‘‘ ‘ ‘ ‘‘  ‘  ‘
‘ ‘‘‘‘ '‘
 ‘ ‘‘
'‘ ‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘%‘
.‘ ‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘%‘‘%‘ ‘ ‘‘
-‘ ‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘%‘ ‘ ‘‘‘
‘ ‘‘
‘ ‘‘‘‘‘‘‘‘‘‘‘‘3,,!‘$‘"!$"!‘
‘ ‘‘
‘ ‘‘‘‘‘‘‘‘3,,‘!‘$‘%#!$‘*#"‘‘((‘
‘ ‘‘
‘ ‘‘‘‘3,,‘!‘$‘‘*#"‘‘((‘
‘ ‘‘
'‘ ‘‘‘‘,,‘‘%‘"!‘‘1‘4‘
$!$‘‘
.‘ ‘‘
-‘ ‘‘‘‘‘‘‘‘‘‘‘ ‘ &‘
'‘ ‘‘
' ‘ ‘‘‘‘‘‘‘‘"# (%( ‘ (‘‘( %‘‘
 !$‘
'‘ ‘‘
'‘ ‘‘‘‘‘‘‘‘3‘
'‘ ‘‘
'‘ ‘‘‘‘,,#‘$#‘$‘6#‘#‘‘#$‘
‘%‘
' ‘ ‘‘‘‘4(#(‘
''‘ ‘‘
'.‘ ‘‘‘‘#!‘
'-‘ ‘‘
.‘ 3,,!‘$‘%‘‘

http://xromsystem.net/?p=192

!
 


 

Este algoritmo compara elementos consecutivos del arreglo uno con respecto del otro, si es
mayor o menor según el tipo de ordenamiento y los cambia de posición. Este proceso se
repite recorriendo todo el arreglo para posicionar un solo dato, por lo que es necesario
repetirlo para los demás datos del arreglo. Su implementación es la siguiente:

‘ $!"#$‘ $7‘
‘ $!"#$‘ "!7‘
‘ $!"#$‘ $*7‘
‘
‘ $$!‘
‘ ‘
‘
‘ 1$‘!&‘
‘ !‘
2‘2‘2‘‘
‘
‘ ""‘
‘
‘ !$5‘,,8!"5‘‘%!$‘$‘!#‘‘
‘
‘ !‘(9!!$‘%‘"!‘!:‘;!(‘
‘ ‘
‘ ‘‘ ‘
‘ ‘
‘ ‘ !$ ‘
‘
‘ ,,8!"!‘$‘<$!!‘‘*#*#‘$‘4‘‘!‘
‘
‘ ‘ ‘‘ ‘
‘ ‘
‘
‘ ‘ ‘‘ ‘
 ‘ ‘
‘
‘ ‘ ‘ ‘‘ ‘ &‘
‘
‘ ‘ ‘ ‘ ‘‘‘
‘ ‘ ‘ ‘ ‘‘ ‘
‘ ‘ ‘ ‘  ‘‘‘
‘ ‘ ‘ 3‘
‘
‘ !‘(;! %‘$!$;!(‘
‘
‘ ‘‘ ‘
‘ ‘
‘ ‘ !‘(=$‘‘=$;!(2‘2‘‘
‘
‘ %"7‘
‘ 3‘

+  % 

Este algoritmo compara uno a uno los elementos del arreglo hasta recorrerlo por completo
indicando si el número buscado existe. Su implementación es la siguiente:

‘ $!"#$‘ $7‘
‘ $!"#$‘ "!7‘
‘ $!"#$‘ $*7‘
‘
‘ $$!‘
‘ ‘
‘
‘ 1$‘!&‘
‘ !‘
2‘2‘2‘2‘!#‘
‘
‘ ""‘
‘
‘ !$5‘,,8!"5‘‘%!$‘$‘!#‘‘
‘
‘ !‘(9!!$‘%‘"!‘!:‘;!(‘
‘
‘ ‘‘ ‘
‘ ‘
‘ ‘ !$ ‘
‘
‘ !‘(>#‘‘*#"?‘(‘
‘ "!‘(=$(2‘@!#‘
‘ ‘
‘ ‘‘ ‘
‘ ‘
‘ ‘ ‘‘‘!#&‘
‘ ‘ ‘
‘ ‘ ‘ !‘(;!A‘!"!$(‘
‘ ‘ ‘ !‘(;!B"!/‘=$(2‘‘
‘ ‘ 3‘
‘ ‘
‘ ‘ ‘
‘ ‘ ‘ !‘(;!>‘C(‘
‘
‘ !‘(D‘%‘/;!(‘
‘
‘ ‘‘ ‘
‘ ‘
‘ ‘ !‘(=$‘(2‘‘
‘ ‘
‘ %"7‘
‘ 3‘

Arriba
+  

Este algoritmo permite buscar de una manera más eficiente un dato dentro de un arreglo,
para hacer esto se determina el elemento central del arreglo y se compara con el valor que
se esta buscando, si coincide termina la busqueda y en caso de no ser asi se determina si el
dato es mayor o menor que el elemento central, de esta forma se elimina una mitad del
arreglo junto con el elemento central para repetir el proceso hasta encontrarlo o tener solo
un elemento en el arreglo. Para poder aplicar este algorimo se requiere que el arreglo este
ordenado. Su implementación es la siguiente:

‘ $!"#$‘ $7‘
‘ $!"#$‘ "!7‘
‘ $!"#$‘ $*7‘
‘
‘ $$!‘
‘ ‘
‘
‘ 1$‘!&‘
‘
‘ !‘
2‘*#"2‘2‘*2‘2‘"!‘
‘
‘ !(9!!$‘‘%‘"!‘!:‘;!(‘
‘
‘ !$5‘,,8!"5‘‘%!$‘$‘‘
‘
‘ ‘!‘‘ ‘
‘ ‘
‘ ‘ !$ ‘
‘
‘ ,,8!"!‘$‘<$!!‘‘*#*#‘$‘!‘‘4‘
‘ !‘(<$!!$‘%;!(‘
‘
‘ ‘!‘ ‘‘ ‘
‘ ‘
‘ ‘ ‘‘ ‘
 ‘ ‘
‘
‘ ‘ ‘ ‘‘‘ &‘
‘
‘ ‘ ‘ ‘ ‘‘‘‘‘‘
‘ ‘ ‘ ‘ ‘‘‘‘‘ ‘
‘ ‘ ‘ ‘ ‘‘‘ ‘‘‘
‘ ‘ ‘ 3‘
‘
‘ ,,8!"!‘$‘*#6#$‘*!‘
‘
‘ !‘(;!8!$#"‘#!‘!#‘‘*#"/‘(‘
‘ "!‘(=$(2‘@*#"‘
‘
‘ *‘‘‘
‘ ‘‘
 ‘
‘ "!‘‘* ,‘
‘
‘ E7‘*‘ ‘‘@@‘*#"‘F‘"!&‘
‘
‘ ‘ *#"‘‘"!‘
‘ ‘ ‘ *‘‘"! ‘
‘
‘ ‘ ‘
‘ ‘ ‘ ‘‘"! ‘
‘
‘ ‘ "!* ,‘
‘ 3‘
‘
‘ ‘*#"‘‘"!‘
‘ ‘ !(;!=$‘!"!$‘!‘"!‘=$(2‘*#"2‘"!‘
‘
‘ ‘
‘ ‘ !(;!=$‘!‘C(2‘*#"‘
‘
‘ !‘(;!;!D‘%‘$!$‘;!;!(‘
‘
‘ ‘‘ ‘
‘ ‘
‘ ‘ !‘(=$‘(2‘‘
‘
‘ %"7‘
‘ 3‘
http://eztigma.brinkster.net/algoritmos.html

http://es.wikipedia.org/wiki/Ordenamiento_de_burbuja

Вам также может понравиться