Anda di halaman 1dari 16

UNIVERSIDAD NACIONAL SAN ANTONIO

ABAD DEL CUSCO


TRABAJO DE INVESTIGACION SOBRE ALGORITMO DE
ORDENACION

FACULTAD:
FACULTAD DE INGENIERA ELCTRICA, ELECTRNICA, INFORMATICA Y MECNICA.
CARRERA:
INGENIERIA INFORMATICA Y DE SISTEMAS
CURSO:
ALGORITMICA III
DOCENTE:
IVAN MEDRANO VALENCIA
ALUMNO:

CODIGO:

NELSON LOPEZ RAMOS


SEMESTRE 2016-1
CUSCO-PERU
2016

120283

TABLA DE RESUMEN DE ALGORITMOS DE ORDENACION


(ESTABILIDAD E IN SITU)
Semestre 2016-1
TAREA 1
Algoritmo de
Ordenacin

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

izq <- ltimo+1


//Burbuja hacia la derecha
//Los valores mayores van a la derecha
Para j <- izq hasta der hacer
Si v(j-1) > v(j) entonces
aux <- v(j)
v(j) <- v(j-1)
v(j-1) <- aux
ltimo <- j
Fin_si
Fin_para
der <- ltimo-1
Hasta (izq > der)
Fin

ORDENAMIENTO CON ARBOL BINARIO

Ordenamiento con rbol binario


El ordenamiento con rbol binario es un algoritmo de ordenamiento, el cual ordena
sus elementos haciendo uso de un rbol binario de bsqueda. Se basa en ir
construyendo poco a poco el rbol binario introduciendo cada uno de los
elementos, los cuales quedarn ya ordenados. Despus, se obtiene la lista de los
elementos ordenados recorriendo el rbol en in-orden.
Complejidad
Insertar elementos en un rbol binario de bsqueda tiene una
complejidad O(log n). Entonces, agregar n elementos a un rbol cualquiera da como
resultado una complejidad O(n log n). Adems, recorrer los elementos del rbol
en in-orden tiene complejidad O(n).
Caractersticas

Tiene un buen rendimiento.

Es estable (no cambia el orden relativo de elementos iguales).

No requiere espacio de almacenamiento extra.

Puede ordenar listas tal cual las recibe.

ORDENAMIENTO CON GNOME SORT


El algoritmo de ordenacin conocido como gNome_sort tiene una historia de
invencin cuasi paralela. Durante un tiempo existi la polmica sobre su
invencin, finalmente atribuida a Hamid Sarbazi-Azad quien lo desarroll en el
ao 2000 y al que llam Stupid sort (Ordenamiento estpido).

Cuando Dick Grune lo invent (ms apropiadamente, lo reinvent) y document,1 no


hall evidencias de que existiera y en palabras suyas, dijo de l
"the simplest sort algorithm"2 (es el algoritmo ms simple) y quizs tenga razn,
pues lo describi en slo cuatro lneas de cdigo. Dick Grune se bas en
los gnomos de jardn holands, en cmo se colocan en los maceteros (ver la
referencia anterior) y de ah tambin el nombre que le dio.
Netamente es un algoritmo de burbuja con una clara
array a ordenar como una cremallera, en un vaivn,
un ordenamiento de burbuja bidireccional, que a su
tambin cocktail shaker(agitador de cocteles), por

particularidad: recorre el
o bien puede ser definido como
vez son llamados
la forma en que trabaja...

Cumple estrictamente hablando con la complejidad O(n).


Descripcin
El algoritmo empieza comparando la primera pareja de valores, si estn en orden
incrementa el puntero y de nuevo realiza la comparacin, si no estn en orden, se
pasa, el menor a la izquierda y el mayor a la derecha, y se reduce el puntero,
ahora la comparacin es con el elemento anterior, si no hay un elemento anterior
se pasa al siguiente elemento. Cuando el puntero alcanza el extremo superior
del array ya est totalmente ordenado.
Cuando compara hacia arriba va sin hacer intercambios, es que el par bajo examen
est ordenado entre s, y cuando compara hacia abajo, va haciendo intercambios.
El proceso aparece como un zigzagueo continuo a un lado y otro.
La operacin empieza por el puntero en el punto ms bajo y cuando llega al
extremo superior ha terminado de ordenar el array.
Para realizar un ordenamiento inverso basta cambiar la decisin de intercambio de
los elementos, es decir dejar los mayores abajo y los menores arriba.

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

ORDENAMIENTO PEINE (COMB SORT)

En ciencias de la computacin, el comb sort (comb=peine) es un algoritmo de


ordenamiento relativamente simple diseado por Wlodzimierz Dobosiewicz en 1980.
Posteriormente fue redescubierto y popularizado por Stephen Lacey y Richard
Box en un artculo publicado por la revista Byte en abril de 1991. El algoritmo
comb sort mejora el algoritmo de ordenamiento de burbuja y rivaliza en velocidad
con algoritmos ms complejos como el Quicksort. La idea bsica es
eliminar tortugas, o pequeos valores cerca del final de la lista, ya que en el
algoritmo de ordenamiento de burbuja esto reduce la velocidad de ordenamiento
tremendamente. (Los conejos, grandes valores alrededor del inicio de la lista, no
plantean un problema en el algoritmo de ordenamiento de burbuja.)
En el ordenamiento de burbuja, cuando dos elementos cualesquiera se comparan,
siempren tienen un espacio (distancia entre ellos) de 1. La idea bsica del
algoritmo comb sort es que el espacio pueda ser mucho mayor de uno.
El ordenamiento Shell tambin se basa en esta idea, pero es una modificacin del
algoritmo de ordenamiento por insercinms que del algoritmo de ordenamiento de
burbuja.
El espacio se inicia como la longitud de la lista a ordenar dividida por
el factor de encogimiento (generalmente 1,3; vase debajo), y la lista se ordena
con este valor (redondeado a la baja a un entero si es necesario) para el
espacio. Despus el espacio se divide por el factor de encogimiento de nuevo, la
lista se ordena con este nuevo espacio, y el proceso se repite hasta que el
espacio es 1. En este momento, el algoritmo comb sort continua usando un espacio
de 1 hasta que la lista est completamente ordenada. La etapa final del
ordenamiento es as equivalente al algoritmo de ordenamiento de burbuja, pero en

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.

Ejemplo en pseudocdigo del algoritmo combsort11

function combsort11(array input)


gap:= input.size //inicializar tamao de espacio
loop until gap = 1 and swaps = 0
//actualizar el valor del espacio para el siguiente rastreo
if gap > 1
gap:= gap / 1.3
if gap = 10 or gap = 9
gap:= 11
end if
end if

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

ORDENAMIENTO POR CASILLEROS (BUCKET SORT)

Los elementos se distribuyen en cubos

Luego se ordenan los elementos de cada cubo

El ordenamiento por casilleros (bucket sort o bin sort, en ingls) es


un algoritmo de ordenamiento que distribuye todos los elementos a ordenar entre
un nmero finito de casilleros. Cada casillero slo puede contener los elementos
que cumplan unas determinadas condiciones. En el ejemplo esas condiciones son
intervalos de nmeros. Las condiciones deben ser excluyentes entre s, para
evitar que un elemento pueda ser clasificado en dos casilleros distintos. Despus
cada uno de esos casilleros se ordena individualmente con otro algoritmo de
ordenacin (que podra ser distinto segn el casillero), o se aplica
recursivamente este algoritmo para obtener casilleros con menos elementos. Se
trata de una generalizacin del algoritmo Pigeonhole sort. Cuando los elementos a
ordenar estn uniformemente distribuidos la complejidad computacional de este
algoritmo es de O(n).
El algoritmo contiene los siguientes pasos:
1. Crear una coleccin de casilleros vacos
2. Colocar cada elemento a ordenar en un nico casillero
3. Ordenar individualmente cada casillero
4. devolver los elementos de cada casillero concatenados por orden

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]

Aqu elementos es la lista de datos a ordenar y n el nmero de casilleros que


queremos usar. Para buscar el casillero adecuado para un elemento se puede
utilizar la tcnica que ms convenga, segn cmo queramos ordenar los datos. La
funcin ordenar puede ser cualquier funcin de ordenamiento, incluso la
propia bucket-sort.

ORDENAMIENTO POR CUENTAS (COUNTING SORT)

Counting Sort (Ordenamiento Por Cuentas)


Ordenamiento por cuentas
El ordenamiento por cuentas (counting sort en ingls) es un algoritmo
ordenamiento en el que se cuenta el nmero de elementos de cada clase
ordenarlos. Slo puede ser utilizado por tanto para ordenar elementos
contables (como los nmeros enteros en un determinado intervalo, pero
nmeros reales, por ejemplo).

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:

Lista sin ordenar: 2, 5, 3, 2, 7, 5, 3, 2, 2

Para ordenarla con este algoritmo, seguimos estos pasos:

Buscar el mnimo y el mximo


Mnimo = 2
Mximo = 7

Crear el vector auxiliar


vaux = nuevo vector (2,7) de enteros

Recorrer la lista de nmeros y contar elementos, debe fijarse como el valor


en la lista de entrada se usa como ndice en el vector auxiliar
Al final,
vAux(2) = 4
vAux(3) = 2

porque aparece 4 veces en la lista


"

"

"

"

vAux(4) = 0

porque no aparece en la lista ninguna vez

vAux(5) = 2

porque aparece 2 veces en la lista

vAux(6) = 0

porque no aparece en la lista ninguna vez

vAux(7) = 1

porque aparece 1 vez en la lista

Recorriendo el vector auxiliar obtenemos la lista de nmeros ordenada


listaValores(0) = 2

El valor 2, se repite 4 veces.

listaValores(1) = 2
listaValores(2) = 2
listaValores(3) = 2
listaValores(4) = 3

El valor 3 se repite 2 veces

listaValores(5) = 3
listaValores(6) = 5

El valor 5 se repite 2 veces

listaValores(7) = 5
listaValores(8) = 7

El valor 7 slo aparece 1 vez

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.

Slo ordena nmeros enteros, no vale para ordenar cadenas y es desaconsejable


para ordenar nmeros decimales. Tericamente se puede, pero debera recrear en la
matriz auxiliar tantas posiciones como decimales quepan entre 2 nmeros
consecutivos, si se restringe a 1 o 2 decimales podra ser asequible un nmero
mayor de decimales puede llegar a suponer una memoria auxiliar impracticable.
Otra limitacin (por ineficiencia) incluso con nmeros enteros es cuando el rango
entre el mayor y el menor es muy grande. Imaginemos una lista de 1000 elementos,
donde el menor es el 0 y el mayor 123456789. Ordenar esta lista supondra crear
una matriz auxiliar de 123456790 elementos. Una cantidad muy elevada de memoria
para ordenar slo 1000 elementos. Tambin supondra un desperdicio de tiempo pues
la matriz auxiliar para trasvasar a la lista ordenada debe recorrerse entera,
aunque slo se reasignarn 1000 valores de los 123456790 elementos.
Con lenguajes de programacin que no permitan definir vectores cuyo primer ndice
sea un valor distinto de 0 o 1 es necesario realizar una traduccin de los
valores. Por ejemplo, si el intervalo es (4,10) y el vector auxiliar comprende el
rango (1-7), para cada elemento se deber incrementar el contador de la posicin
en 3.
Un modo de hacer este algoritmo ms prctico, es guardar varios elementos en un
ndice de la matriz, pero en este caso la matriz ya no es de valores enteros sino
que contiene algn tipo de estructura de datos. As es posible por ejemplo
ordenar nmeros con decimales. Por ejemplo si en la matriz auxiliar en el ndice
5, metemos todas las apariciones de la lista cuyo valor est en el rango 5.0 5.99. Luego con cada elemento en cada ndice se realiza un nuevo ordenamiento.
cuando se usan este tipo de tcnicas, el algoritmo ya se considera otro,
denominado: bucket sort.
Pseudocdigo
Se han aadido los comentarios pertinentes para aclarar las partes que fueren ms
dudosas.

comentario: listaValores es una matriz de valores enteros.


Entrada Funcin counting_sort(listaValores)
ListaVariables
minValor
comentario: el valor del elemento menor en la lista
maxValor
comentario: el valor del elemento mayor en la lista
vAux
comentario: una matriz de elementos auxiliar de tanto
elementos como
define el rango minValor a maxValor
i, j, n
comentario: contadores de bucle
valor
comentario: valor del elemento actual en el bucle

tamao

comentario: cantidad de elementos en listaValores

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

comentario: Trasvasar la matriz de conteo a la lista, que queda as ya

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)

Si listaValores(i) > maxValor entonces


maxValor = listaValores(i)
Fin Si
Siguiente i

Fin
Salida Funcin

ORDENAMIENTO RADIX (RADIX SORT)


En informtica, el ordenamiento Radix (radix sort en ingls) es un algoritmo de
ordenamiento que ordena enteros procesando sus dgitos de forma individual. Como
los enteros pueden representar cadenas de caracteres (por ejemplo, nombres o
fechas) y, especialmente, nmeros en punto flotante especialmente
formateados, radix sort no est limitado slo a los enteros.
La mayor parte de los ordenadores digitales representan internamente todos sus
datos como representaciones electrnicas de nmeros binarios, por lo que procesar
los dgitos de las representaciones de enteros por representaciones de grupos de
dgitos binarios es lo ms conveniente. Existen dos clasificaciones de radix
sort: el de dgito menos significativo (LSD) y el de dgito ms significativo
(MSD). Radix sort LSD procesa las representaciones de enteros empezando por el
dgito menos significativo y movindose hacia el dgito ms significativo. Radix
sort MSD trabaja en sentido contrario.
Las representaciones de enteros que son procesadas por los algoritmos de
ordenamiento se les llama a menudo "claves", que pueden existir por s mismas o
asociadas a otros datos. Radix sort LSD usa tpicamente el siguiente orden:
claves cortas aparecen antes que las claves largas, y claves de la misma longitud
son ordenadas de forma lxica. Esto coincide con el orden normal de las
representaciones de enteros, como la secuencia "1, 2, 3, 4, 5, 6, 7, 8, 9,
10". Radix sorts MSD usa orden lxico, que es ideal para la ordenacin de cadenas
de caracteres, como las palabras o representaciones de enteros de longitud fija.
Una secuencia como "b, c, d, e, f, g, h, i, j, ba" ser ordenada lxicamente como
"b, ba, c, d, e, f, g, h, i, j". Si se usa orden lxico para ordenar
representaciones de enteros de longitud variable, entonces la ordenacin de las
representaciones de los nmeros del 1 al 10 ser "1, 10, 2, 3, 4, 5, 6, 7, 8, 9",
como si las claves ms cortas estuvieran justificadas a la izquierda y rellenadas
a la derecha con espacios en blanco, para hacerlas tan largas como la clave ms
larga, para el propsito de este ordenamiento. cabe destacar que este mtodo no
funciona para la estructura de datos debido a que los ciclos for que se
implementaran marcaran error debido a las matrices bidimensionales.

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

Anda mungkin juga menyukai