You are on page 1of 20

MTODOS DE ORDENAMIENTO

ING. CSAR AUGUSTO GUTIRREZ RODRGUEZ

Introduccin
Los mtodos de ordenamiento nos permiten, organizar la
informacin contenida en vectores o matrices con valores
asignados manual o aleatoriamente.
Veremos los mtodos mas utilizados, analizando la
cantidad de comparaciones que suceden, el tiempo que
demora y revisando el cdigo, escrito en Java, de cada
algoritmo.

Mtodo Burbuja
El mtodo de la burbuja es uno de los mas simples, es tan fcil como
comparar todos los elementos de una lista contra todos, si se cumple
que uno es mayor o menor a otro, entonces los intercambia de
posicin.
Se denomina burbuja debido a que los valores ms pequeos
burbujean gradualmente (suben) hacia la cima o parte superior del
array de modo similar a como suben las burbujas en el agua, mientras
que los valores mayores se hunden en la parte inferior del array.

Mtodo Burbuja Simple


La burbuja mas simple de todas es la que compara todos con todos,
generando comparaciones extras, por ejemplo, no tiene sentido que
se compare con sigo mismo o que se compare con los valores
anteriores a el, ya que supuestamente, ya estn ordenados.
Por ejemplo, imaginemos que tenemos los siguientes valores:
5

Lo que hara una burbuja simple, seria comenzar recorriendo los


valores de izq. A derecha, comenzando por el 5. Lo compara con
el 6, con el 1, con el 0 y con el 3, si es mayor o menor
(dependiendo si el orden es ascendiente o descendiente) se
intercambian de posicin. Luego continua con el siguiente, con el
6, y lo compara con todos los elementos de la lista, esperando ver
si se cumple o no la misma condicin que con el primer elemento.
As, sucesivamente, hasta el ultimo elemento de la lista.

Estructura En JAVA

for (i=0; i<n; i++)


{
for (j=i+1; j<n; j++)
{
if(V[i]>V[j])
{
aux = V[i];
V[i] = V[j];
V[j] = aux;
}
}
}

Ejemplo:
Elementos (A = 50, 20, 40, 80, 30), donde se introduce una variable
interruptor para detectar si se ha producido intercambio en la pasada.
Pasada 0

Intercambio 50 y 20

50

20

40

80

30

20

50

40

80

30

Intercambio 50 y 40

20

40

50

80

30

50 y 80 ordenados

20

40

50

80

30

Intercambio 80 y 30

80

Elemento mayor es
80
interruptor = TRUE

20

40

50

30

Pasada 1

20

40

50

30

80

20 y 40 ordenados

20

40

50

30

80

40 y 50 ordenados

20

40

50

30

80

Se intercambian 50 y 30

20

40

30

50

80

50 y 80 elementos
mayores y ordenados
interruptor = TRUE

Pasada 2.- Solo se hacen dos comparaciones.


20

20

40

30

30

40

50

50

80

80

20 y 40 ordenados

Se intercambian 40 y 30
interruptor = TRUE

Pasada 3.- Se hace una nica comparacin de 20 y 30, y no se produce


intercambio:
20

30

40

50

80

20

30

40

50

80

20 y 30 ordenados

Lista ordenada
interruptor = FALSE

Mtodo Seleccin
Los mtodos de ordenacin por seleccin se basan en dos principios bsicos:
Seleccionar el elemento ms pequeo (o ms grande) del arreglo.
Colocarlo en la posicin ms baja (o ms alta) del arreglo.
A diferencia del mtodo de la burbuja, en este mtodo el elemento ms
pequeo (o ms grande) es el que se coloca en la posicin final que le
corresponde.

Consideremos un array A con 5 valores enteros 51, 21, 39, 80, 36:

A[0]
51

A[1]

A[2]

A[3]

A[4]

21

39

80

36

51

39

80

36

Pasada 0
21

Pasada 1

Pasada 0.
Seleccionar 21
Intercambiar 21 y
A[0]
Pasada 1.
Seleccionar 36
Intercambiar 36 y
A[1]

21

36

39

80

5151

80

51

Pasada 2.
Seleccionar 39
Intercambiar 39 y
A[2]

Pasada 2
21

36

39

Pasada 3
21

36

39

51

8080

Pasada 3.
Seleccionar 51
Intercambiar 51 y
A[3]
Lista ordenada

Estructura en JAVA

for (i=0; i<n; i++)


{
imin=i;
for (j=i+1; j<n; j++)
{
if(V[j]<V[imin])
imin=j;
}
aux = V[i];
V[i] = V[imin];
V[imin] = aux;
}

Mtodo Insercin
El mtodo de ordenacin por insercin es similar al proceso tpico de ordenar
tarjetas de nombres (cartas de una baraja) por orden alfabtico, que consiste
en insertar un nombre en su posicin correcta dentro de una lista o archivo
que ya est ordenado.
As el proceso en el caso de la lista de enteros A = 50, 20, 40, 80, 30.
50

Se comienza por el 50

Procesar 20

20

50

Se inserta 20 en la posicin 0
50 se mueve a posicin 1

Procesar 40

20

40

50

Se inserta 40 en la posicin 1
Se mueve 50 a posicin 2

Procesar 80

20

40

50

80

El elemento 80 est bien


ordenado

Procesar 30

20

30

40

50

80

Se inserta 30 en posicin 1
Se desplaza a la derecha la
sublista derecha

Estructura en JAVA
for(i=1; i<n; i++) {
temp = V[i];
Izq = 0;
Der = i-1;
while(Izq <= Der){
Medio = (Izq+Der)/2;
if (temp < V[Medio])
Der = Medio - 1;
else
Izq = Medio + 1;
}
for (j=i-1; j>=Izq; j--){
V[j+1]=V[j];
}
V[Izq] = temp;
}

Mtodo Shell
El nombre se debe a su inventor, D. L. Shell. Se suele
denominar tambin ordenacin por insercin con
incrementos decrecientes. Se considera que el mtodo
Shell es una mejora de los mtodos de insercin directa.
Shell modifica los saltos contiguos resultantes de las
comparaciones por saltos de mayor tamao y con ello se
consigue que la ordenacin sea ms rpida.
Generalmente se toma como salto inicial n/2 (siendo n el
nmero de elementos), luego se reduce el salto a la
mitad en cada repeticin hasta que el salto es de
tamao 1.

Ejemplo
74, 14, 21, 44, 38, 97, 11, 78, 65, 88, 30
Se debe empezar con k=n/2 , siendo n el nmero de elementos de
arreglo, y utilizando siempre la divisin entera.... despus iremos
variando k hacindolo ms pequeo mediante sucesivas divisiones por
2, hasta llegar a k=1. Pero vamos a ello... En nuestro ejemplo, n=11
(porque hay 11 elementos). As que k=n/2=11/2=5
Empezamos con k=5. As pues, vamos a dividir nuestro arreglo original
en 5 sub-arreglo, en los cuales, sus elementos estarn separados por 5
lugares del arreglo original (el salto o gap es 5).

1.- Tomamos el primer elemento (el 74) contamos 5 lugares y tomamos


tambin otro elemento (el 97) volvemos a contar 5 y tomamos otro (el
30) y acabamos porque se nos acaba el arreglo. El primer sub-arreglo
con k=5 es el formado por 74, 97 y 30.
74 , 14, 21, 44, 38, 97 , 11, 78, 65, 88, 30

Ahora, ordenaremos los elementos del sub-arreglo (rojo) pero slo


entre ellos, utilizando el algoritmo de Insercin directa.
74, 97, 30
30 , 14, 21, 44, 38, 74 , 11, 78, 65, 88, 97
El 30, un elemento relativamente pequeo se ha ido hacia el principio
y el 97 hacia el final.
Formemos ahora otro sub-arreglo con salto k=5... partiendo del
segundo elemento (el 14) y contando 5 (tomamos tambin el 11) y
hasta ah, porque se acaba el arreglo.
30 , 14 , 21, 44, 38, 74 , 11 , 78, 65, 88, 97
Vamos a ordenarlos el 11 primero y el 14 despus.

30 , 11 , 21, 44, 38, 74 , 14 , 78, 65, 88, 97

30 , 11 , 21, 44, 38, 74 , 14 , 78, 65, 88, 97


Ahora a por otro el 21 y el 78

30 , 11 , 21, 44, 38, 74 , 14 , 78, 65, 88, 97


Estn en orden entre ellos, as que se quedan como estn.

Ahora le toca al sub-arreglo formado por el 44 y el 65


30 , 11 , 21, 44, 38, 74 , 14 , 78, 65, 88, 97

Que tambin estn en orden entre ellos.

y finalmente el 38 y el 88, que tambin estn en orden.

30 , 11 , 21, 44, 38, 74 , 14 , 78, 65, 88, 97

An no hemos terminado de ordenarlos.

Nuestra k vala 5, as que ahora kk/2=5/2=2, nuestra nueva k vale 2.


Repetimos todo el desarrollo anterior, pero ahora nos saldrn 2 subarreglo cuyos elementos estn separados por 2 lugares.
Tomamos el primer elemento (el 30) contamos 2 lugares y tomamos
tambin otro elemento (el 21) volvemos a contar 2 y tomamos otro
(el 38), volvemos a contar y ahora tomamos (el 14), seguimos
contado y tomamos (el 65), seguimos contando y tomamos (el 97) y
acabamos porque se nos acaba el arreglo. Y posteriormente se
forma el segn sub-arreglo que empieza con el 11.
30 , 11 , 21, 44, 38, 74 , 14 , 78, 65, 88, 97
Se ordena (primero los rojos), con el mtodo de insercin:

14 , 11 , 21, 44, 30, 74 , 38 , 78, 65, 88, 97


Finalmente ordenamos los blancos, pero estos ya estn ordenados:
14 , 11 , 21, 44, 30, 74 , 38 , 78, 65, 88, 97

Finalmente, calculamos un nuevo k dividiendo el que tenemos entre 2.


kk/2=2/2=1 Hemos llegado a k=1. Cuando k es 1 slo podemos
obtener 1 sub-arreglo cuyos elementos estn separados 1 posicin: el
propio arreglo original. Dicho de otra manera... cuando k es 1, el
algoritmo de Shell se comporta exactamente igual que el de insercin
directa sobre todo el arreglo.

14 , 11 , 21, 44, 30, 74 , 38 , 78, 65, 88, 97

El mtodo de insercin directa se comporta tanto mejor cuanto ms


cerca est cada elemento de su sitio definitivo. Finalmente, el arreglo
queda de sta manera:

11, 14, 21, 30, 38, 44, 65, 74, 78, 88, 97

Cada elemento descolocado ha tenido que moverse pocos lugares.


Muchos de ellos ni siquiera se han movido.

Estructura en JAVA
void shellSort(int a[], int h)
{
int i;
while (h > 0)
{ for (i = h-1; i<n; i++)
{
int B = a[i];
int j = i;
for (j = i; (j >= h) && (a[j - h] > B); j -= h)
{ a[j] = a[j - h];}
a[j] = B;
}
h = h / 2;
}
}

You might also like