Professional Documents
Culture Documents
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.
Estructura En JAVA
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
20
40
30
30
40
50
50
80
80
20 y 40 ordenados
Se intercambian 40 y 30
interruptor = TRUE
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
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
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).
11, 14, 21, 30, 38, 44, 65, 74, 78, 88, 97
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;
}
}