FACULTAD:
FACULTAD DE INGENIERA ELCTRICA, ELECTRNICA, INFORMATICA Y MECNICA.
CARRERA:
INGENIERIA INFORMATICA Y DE SISTEMAS
CURSO:
ALGORITMICA III
DOCENTE:
IVAN MEDRANO VALENCIA
ALUMNO:
CODIGO:
120283
Mejor Caso
Peor Caso
Caso Promedio
Estabilidad
IN SITU
InsertionSort
Estable
Si
SelectionSort
No Estable
Si
BubbleSort
Estable
Si
No Estable
Si
HeapSort
No Estable
Si
MergeSort
Estable
No
QuickSort
No Estable
Si
CountingSort
Estable
No
RadixSort
Estable
No
ShellSort
Depende (*)
Depende (*)
TAREA 2
ALGORITMOS DE ORDENACION
ORDENACION POR SACUDIDA (SHAKER SORT)
Ordenamiento de burbuja bidireccional o por sacudida.
El ordenamiento de burbuja bidireccional (shaker sort, cocktail sort en ingls)
es un algoritmo de ordenamiento que surge como una mejora del
algoritmo ordenamiento de burbuja.
La manera de trabajar de este algoritmo es ir ordenando al mismo tiempo por los
dos extremos del vector. De manera que, tras la primera iteracin, tanto el menor
como el mayor elemento estarn en sus posiciones finales. De esta manera se
reduce el nmero de comparaciones aunque la complejidad del algoritmo sigue
siendo O(n).
Hacemos un recorrido ascendente (del primer elemento al ltimo), cogemos el
primer elemento y lo comparamos con el siguiente, si el siguiente es menor lo
pasamos al puesto anterior, de esta forma al final de la lista nos queda el
mayor. Una vez terminada la serie ascendente, hacemos un recorrido descendente
(del ltimo elemento al primero) pero esta vez nos quedamos con los menores a los
que vamos adelantando posiciones en vez de retrasarlas como hicimos en la serie
ascendente. Repetimos las series alternativamente, pero reduciendo el mbito en
sus extremos pues ya tendremos all los valores ms bajos y ms altos de la
lista, hasta que no queden elementos en la serie; en el pseudocdigo de ejemplo:
Hasta (izq > der).
A continuacin, se muestra el pseudo-cdigo del algoritmo:
Procedimiento Ordenacion_Sacudida (v:vector, tam:entero)
Variables
i, j, izq, der, ltimo: tipoposicion;
aux: tipoelemento;
Inicio
//Lmites superior e inferior de elementos ordenados
izq <- 2
der <- tam
ltimo <- tam
Repetir
//Burbuja hacia la izquierda}
//Los valores menores van a la izquierda
//der va disminuyendo en 1 hasta llegar a izq
Para i <- der hasta izq hacer
Si v(i-1) > v(i) entonces
aux <- v(i)
v(i) <- v(i-1)
v(i-1) <- aux
ltimo <- i
Fin_si
Fin_para
particularidad: recorre el
o bien puede ser definido como
vez son llamados
la forma en que trabaja...
Pseudocdigo
i 1
Mientras i len- 1
Si i=1 o a[i-1] a[i]
i i+1
Sino
temp a[i-1]
a[i-1] a[i]
a[i] temp
i i-1
Si i = 0
i 1
Finsi
Finsi
FinMientras
este momento la mayora de las tortugas ya han sido tratadas, de manera que un
algoritmo de ordenamiento de burbuja ser eficiente.
Factor de encogimiento
El factor de encogimiento tiene un gran efecto en la eficiencia del algoritmo
comb sort. En el artculo original, los autores sugierieron 1,3 despus de probar
algunas listas aleatorias y encontrarlo generalmente el ms efectivo. Un valor
muy pequeo reduce la velocidad del algoritmo porque se deben hacer ms
comparaciones, mientras que un valor demasiado grande puede que no elimine
suficientes tortugas para que sea prctico.
El texto describe una mejora del algoritmo comb sort usando el valor
base
como factor de encogimiento. Tambin
contiene una implementacin en pseudocdigo con unas tablas de espacios
predefinidos.
Combsort11
Con un factor de encogimiento alrededor de 1,3, slo hay tres posibles maneras de
que la lista de espacios acabe: (9, 6, 4, 3, 2, 1), (10, 7, 5, 3, 2, 1), o (11,
8, 6, 4, 3, 2, 1). Slo el ltimo de estos dos finales mata todas las tortugas
antes de que el espacio se convierta en 1. Por lo tanto, se pueden hacer mejoras
significativas en la velocidad si el espacio se establece en 11 siempre que sea 9
o 10. A esta variacin se le llama Combsort11.
Si se usa cualquiera de las secuencias que comienza por 9 o 10, el paso final con
un espacio de 1 es menos probable que haya ordenado los datos completamente,
necesitando otro paso con un espacio de 1. Los datos estn ordenados cuando no se
hacen intercambios durante un paso con espacio = 1.
i:= 0
swaps:= 0 //vase ordenamiento de burbuja para una explicacin
//un nico "rastreo" sobre la lista de entrada
loop until i + gap >= array.size
if array[i] > array[i+gap]
swap (array[i], array[i+gap])
swaps:= swaps + 1
end if
i:= i + 1
end loop
end loop
end function
Pseudocdigo
funcin bucket-sort(elementos, n)
casilleros coleccin de n listas
para i = 1 hasta longitud(elementos) hacer
c buscar el casillero adecuado
insertar elementos[i] en casillero[c]
fin para
para i = 1 hasta n hacer
ordenar(casilleros[i])
fin para
devolver la concatenacin de casilleros[1],..., casilleros[n]
de
para luego
que sean
no los
El primer paso consiste en averiguar cul es el intervalo dentro del que estn
los datos a ordenar (valores mnimo y mximo). Despus se crea un vector de
nmeros enteros con tantos elementos como valores haya en el intervalo
[mnimo, mximo], y a cada elemento se le da el valor 0 (0 apariciones). Tras
esto se recorren todos los elementos a ordenar y se cuenta el nmero de
apariciones de cada elemento (usando el vector que hemos creado). Por ltimo,
basta con recorrer este vector para tener todos los elementos ordenados.
Ejemplo
Considrese la siguiente lista de nmeros:
"
"
"
vAux(4) = 0
vAux(5) = 2
vAux(6) = 0
vAux(7) = 1
listaValores(1) = 2
listaValores(2) = 2
listaValores(3) = 2
listaValores(4) = 3
listaValores(5) = 3
listaValores(6) = 5
listaValores(7) = 5
listaValores(8) = 7
Lista ordenada = 2, 2, 2, 2, 3, 3, 5, 5, 7
Caractersticas
Se trata de un algoritmo estable cuya complejidad computacional es O(n+k),
siendo n el nmero de elementos a ordenar y k el tamao del vector auxiliar
(mximo - mnimo).
La eficiencia del algoritmo es independiente de lo casi ordenado que estuviera
anteriormente. Es decir no existe un mejor y peor caso, todos los casos se tratan
iguales.
El algoritmo counting, no se ordena in situ, sino que requiere de una memoria
adicional.
Limitaciones[editar]
El algoritmo posee una serie de limitaciones que obliga a que slo pueda ser
utilizado en determinadas circunstancias.
tamao
Previos
comentario: Buscar valor mnimo y mximo
LlamadaaFuncion BuscarLimites(listaValores, minValor, maxValor)
comentario: Crea el vector auxiliar, con todos sus elementos a 0
vAux = NuevoVector(minValor,maxValor)
comentario: Obtiene la cantidad de elementos que contiene la matriz
tamao = TotalElementosEn(listaValores)
comentario: Contar elementos. En el ndice expresado por el valor, se
van contando
las veces que aparece dicho valor en la matriz de entrada
comentario: Este bucle realiza una matriz de conteo, cada valor indica
cuantas veces
aparece el valor representado por el ndice en la lista de
valores.
Inicio
i = 0
Hacer Mientras (i < tamao)
valor = listaValores(i)
vAux(valor] = vAux(valor) + 1
i = i + 1
Repetir
ordenada
i = minValor
j = 0
Hacer Mientras (i < maxValor)
comentario: Si para el ndice 'i' se cont 1 o ms elementos,
transferir a la lista
Si vAux(i) > 0 Entonces
Para n Repetir Desde 1 Hasta vAux(i)
listaValores(j) = i
j = j + 1
Siguiente n
Fin si
Repetir
Fin
Salida Funcin
comentario: Esta funcin auxiliar busca y devuelve el mayor y menor elementos
de una matriz
Entrada Funcin BuscarLimites(listaValores, minValor, maxValor)
Variables
i
comentario: contador del bucle
Inicio
minValor = listaValores(0)
maxValor = minValor
Para i Repetir Desde 1 Hasta TotalElementosEn(ListaValores)
Si listaValores(i) < minValor entonces
minValor = listaValores(i)
Fin
Salida Funcin
EJEMPLO
Vector original:
25 57 48 37 12 92 86 33
Asignamos los elementos en colas basadas en el dgito menos significativo de cada
uno de ellos.
0:
1:
2:12 92
3:33
4:
5:25
6:86
7:57 37
8:48
9:
Despus de la primera pasada, la ordenacin queda:
12 92 33 25 86 57 37 48
Colas basadas en el dgito ms significativo.
0:
1:12
2:25
3:33 37
4:48
5:57
6:
7:
8:86
9:92
Lista ordenada:
12 25 33 37 48 57 86 92