Sunteți pe pagina 1din 30

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

MONOGRAFIA
Tema: Mtodos de Ordenamiento y Anlisis Algortmico
Materia: Algoritmo y Estructura de Datos
Integrantes:
- Martin, Rodrigo Alexander
- Martnez Roitman, Aldana Milena
- Mendez Utz, Pelayo Andrs
- Miranda Colletti, Franco Emmanuel
Comisin: 1K7
Fecha de Presentacin: 15 de Octubre de 2012

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

ndice
Introduccin

Anlisis de algoritmos

4-5

Orden de un algoritmo

5-7

Mtodos de ordenamiento

8-27

Seleccin
-

Algoritmo
Pseudocdigo
Ejemplo
Anlisis

8
9
10
11

Algoritmo
Pseudocdigo
Ejemplo
Optimizacin
Anlisis

12
13
13-14
14
15

Burbuja
-

Insercin o Baraja
-

Algoritmo
Pseudocdigo
Ejemplo
Anlisis

16
17
18
19

Rpido o QuickSort
-

Algoritmo
Pseudocdigo
Ejemplo
Anlisis

20-21
22
23-24
24-25

Mezcla o MergeSort
-

Algoritmo
Ejemplo
Anlisis

Anlisis general de los mtodos de ordenamiento


Conclusin
Bibliografa

26
26
27
28
29
30

Introduccin
2

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

En la siguiente monografa se trataran los temas de anlisis algortmico y tipos de


ordenamiento.
Consideramos que para poder emprender el desarrollo de los temas mencionados se
deber definir previamente que es un algoritmo:
En matemticas, ciencias de la computacin y disciplinas relacionadas,
un algoritmo es un conjunto preescrito de instrucciones o reglas bien definidas,
ordenadas y finitas que permite realizar una actividad mediante pasos sucesivos
que no generen dudas a quien deba realizar dicha actividad
Tomando lo citado, podremos definir brevemente que un anlisis algortmico, es
precisamente eso, analizar a fondo el algoritmo, desde que es lo que hace, el fin del por
que fue creado, su complejidad, las instrucciones que se llevan a cabo, la cantidad de
lneas que posee, el uso de memoria que requiere, el tiempo empleado para ejecutarlo.
Resumindolo, en pocas palabras, seria comprobar, estudiar la eficiencia y eficacia del
algoritmo a analizar.
sta es una tarea, bastante complicada para el programador, ya que existen distintas
formas de plantear un algoritmo para un problema a resolver.
En la presente monografa el problema que se intentar resolver, es el de ordenar una
lista de elementos, por lo que se trabajar con algoritmos de ordenamiento. Pero Qu
es ordenamiento?
El ordenamiento es una labor comn que realizamos continuamente. Es algo tan
corriente en nuestras vidas que no nos detenemos a pensar en ello. Ordenar es
simplemente colocar informacin de una manera especial basndonos en un criterio de
ordenamiento.
El propsito principal de un ordenamiento es el de facilitar las bsquedas de los
miembros del conjunto ordenado. Ejemplos simples de esto, seria una agenda telefnica,
un diccionario, entre otros
En la computacin el ordenamiento de datos tambin cumple un rol muy importante, ya
sea como un fin en s o como parte de otros procedimientos ms complejos. Se han
desarrollado muchas tcnicas en este mbito, cada una con caractersticas especficas, y
con ventajas y desventajas sobre las dems.
En la siguiente monografa se tratar de explicar algunas de las ms comunes, tratando
de hacerlo de una manera sencilla y comprensible.

Mtodos de Ordenamiento y Anlisis Algortmico


3

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

Qu es el Anlisis Algortmico?
Para desarrollar este punto, se debe tener en cuenta de que cada programador desea
escribir el algoritmo o programa lo ms eficaz posible para el problema que desea
resolver. Tal acercamiento nos conlleva a pensar: Qu hace que un algoritmo sea difcil
de ejecutar por un agente de cmputo?
Esto es lo que de forma intuitiva se define como complejidad computacional. Esto nos
lleva a definir criterios para medir la eficiencia de un algoritmo. Entendindose como
eficiente a un programa o algoritmo que minimiza los recursos que emplea el
computador para lograr la solucin del problema planteado, es decir, minimizar cierta
funcin de costo, por ejemplo; el tamao del programa, el nmero de pasos a ejecutar, la
economa de la memoria, la velocidad de ejecucin, la simplicidad de su
implementacin, etc.
Al hablar de complejidad computacional, es necesario dividir en dos conceptos para
entenderla mejor.
La complejidad esttica de un algoritmo, esta relacionada con la complejidad del

texto del algoritmo es decir, su longitud, su forma estructural, variedad de tipos de


instrucciones usadas en l, etc. Esta medida de complejidad caracteriza al algoritmo
sin importar la cantidad de datos de entrada a los que pueden aplicarse el algoritmo.
La complejidad dinmica, est relacionado con el uso de los recursos requeridos por
el computador para llevar a fin la ejecucin del algoritmo para una entrada
determinada de datos es decir, el tiempo para su ejecucin, el uso de memoria, etc.
Tanto la complejidad esttica y dinmica de un algoritmo depende de varios elementos:
el formalismo con que es expresado el algoritmo, el agente de cmputo que lo ejecutara,
el fin del algoritmo y el criterio para evaluar su eficacia.
Evaluar la complejidad intrnseca de un problema es en general una tarea difcil, ya que
puede existir un gran nmero de algoritmos equivalentes diferentes para resolver el
problema dado.
El anlisis de algoritmos es una parte importante de la Teora de complejidad
computacional ms amplia, que provee estimaciones tericas para los recursos que
necesita cualquier algoritmo que resuelva un problema computacional dado. Estas
estimaciones resultan ser bastante tiles en la bsqueda de algoritmos eficientes.
A efectos prcticos o ingenieriles, nos deben preocupar los recursos fsicos necesarios
para que un programa se ejecute. Aunque puede haber muchos parmetros; los mas
usuales son el tiempo de ejecucin y la cantidad de memoria (espacio). Ocurre con
frecuencia que ambos parmetros estn fijados por otras razones y se plantea la
pregunta inversa: cual es el tamao del mayor problema que puedo resolver en T
segundos y/o con M bytes de memoria? En lo que sigue nos centraremos casi siempre
en el parmetro tiempo de ejecucin, si bien las ideas desarrolladas son fcilmente
aplicables a otro tipo de recursos.
Para cada problema determinaremos una medida N de su tamao (por nmero de datos)
e intentaremos hallar respuestas en funcin de dicho N. El concepto exacto que mide N
4

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

depende de la naturaleza del problema. As, para un vector se suele utilizar como N su
longitud; para una matriz, representa el nmero de elementos que la componen; para un
grafo, puede ser el nmero de nodos (a veces es mas importante considerar el nmero de
aristas, dependiendo del tipo de problema a resolver); en un fichero se suele usar el
nmero de registros, etc. Es imposible dar una regla general, pues cada problema tiene
su propia lgica de coste.

Orden de un Algoritmo
Un algoritmo de ordenamiento es un algoritmo que pone elementos de una lista o un
vector en una secuencia dada por una relacin de orden, es decir, el resultado de salida
ha de ser una permutacin o reordenamiento de la entrada que satisfaga la relacin
de orden dada. Los ordenamientos eficientes son importantes para optimizar el uso de
otros algoritmos que requieren listas ordenadas para una ejecucin rpida. Tambin es
til para poner datos en forma cannica y para generar resultados legibles por humanos.
Algunos algoritmos de ordenamiento son agrupados segn su estabilidad tomando en
cuenta la complejidad computacional. La complejidad del algoritmo no tiene que ver
con su dificultad, sino, con su rendimiento, que es una funcin independiente de la
implementacin.
Las funciones de complejidad algortmica ms habituales en las cuales el nico factor
del que dependen es el tamao de la muestra de entrada n, ordenadas de mayor a menor
eficiencia son:
O(1)

Orden constante

O(log n)

Orden logartmico

O(n)

Orden lineal

O(n log n)

Orden cuasi-lineal

O(n)

Orden cuadrtico

O(n)

Orden cbico

O(na)

Orden polinmico

O(2n)

Orden exponencial

O(n!)

Orden factorial

O(1) - Complejidad constante: Cuando las instrucciones se ejecutan una sola vez.
O(log n) - Complejidad logartmica: Esta suele aparecer en determinados algoritmos

con iteracin o recursin no estructural. Por ejemplo: la bsqueda binaria.


5

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

O(n) - Complejidad lineal: Es una complejidad buena y tambin muy usual. Aparece

en la evaluacin de bucles simples siempre que la complejidad de las instrucciones


interiores sea constante.
O(n log n) - Complejidad cuasi-lineal: Se encuentra en algoritmos de tipo Divide y
Vencers como por ejemplo, en el mtodo de ordenamiento Rpido (QuickSort) y se
considera una buena complejidad. Si n se duplica, el tiempo de ejecucin es
ligeramente mayor del doble.
O(n2) - Complejidad cuadrtica: Aparece en bucles o ciclos doblemente anidados. Si
n se duplica, el tiempo de ejecucin aumenta cuatro veces.
O(n3) - Complejidad cbica: Suele darse en bucles con triple anidacin. Si n se
duplica, el tiempo de ejecucin se multiplica por ocho. Para un valor grande de n
empieza a crecer dramticamente.
O(na) - Complejidad polinmica (a > 3): Si a crece, la complejidad del programa es
bastante mala.
O(2n) - Complejidad exponencial: No suelen ser muy tiles en la prctica por el
elevadsimo tiempo de ejecucin. Se dan en subprogramas recursivos que contengan
dos o ms llamadas internas.

Otro aspecto a considerar es la diferencia entre el peor y el mejor caso. Cada algoritmo
se comporta de modo diferente de acuerdo a cmo se le entregue la informacin; por
eso es conveniente estudiar su comportamiento en casos extremos, como cuando los
datos estn prcticamente ordenados o muy desordenados.

Los algoritmos de ordenamiento ms conocidos son:


6

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

Burbuja
Seleccin
Insercin o Baraja
Rpido o Quicksort
Mezcla o Mergesort
Tabla comparativa de algoritmos
Nombre

Complejidad Estabilidad Memoria adicional

Ordenamiento Burbuja

O(n2)

Estable

Ordenamiento por Seleccin

O(n2)

No Estable

Estable

Ordenamiento por Insercin


Ordenamiento Rpido (QuickSort)

O(n )

O(n*log(n)) No Estable

Ordenamiento Mezcla (MergeSort) O(n*log(n))

Estable

log(n)
n

Mtodos de Ordenamiento
7

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

SELECCIN:

Este algoritmo es sencillo. Consiste en lo siguiente:

Se busca el elemento ms pequeo de la lista.


Se lo intercambia con el elemento ubicado en la primera posicin de la lista.
Se busca el segundo elemento ms pequeo de la lista.
Se lo intercambia con el elemento que ocupa la segunda posicin en la lista.
Se repite este proceso hasta que se haya ordenado toda la lista.

Pseudocdigo en C:
8

Mtodos De Ordenamiento Y Anlisis Algortmico


Nombre

Tipo

UTN-FRT
Uso

Vector

Cualquiera (En el ejemplo se us


tipo Entero)

Lista a ordenar

Orden

Entero

Cantidad de valores en la lista

Entero

Contador (Posicin a ordenar)

Entero

Contador (Para la bsqueda del menor


elemento)

Menor

Entero

Posicin del menor elemento de la lista

Aux

Mismo que el de los elementos de


la lista

Para realizar los intercambios

Ejemplo:
9

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

Se toma el siguiente vector:


4-3-5-2-1
Comenzamos buscando el menor elemento entre la primera y ltima posicin. En este
caso, el 1. Lo intercambiamos con el primer elemento, el 4, y la lista quedara as:
1-3-5-2-4
Ahora buscamos el menor elemento entre la segunda y la ltima posicin, que es el 2.
Lo intercambiamos con el elemento en la segunda posicin, es decir el 3. La lista
quedara as:
1-2-5-3-4
Buscamos el menor elemento entre la tercera posicin y la ltima. Es decir el 3, que se
lo intercambia con el 5:
1-2-3-5-4
El menor elemento entre la cuarta y quinta posicin es el 4, que se lo intercambia con el
5:
1-2-3-4-5
Y as, la lista de nmeros queda correctamente ordenada.

Analizando el Algoritmo:
10

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

Requerimientos de Memoria: Este algoritmo slo necesita una variable adicional


para realizar los intercambios.

Tiempo de Ejecucin: Este algoritmo es el ms sencillo de analizar en


comparacin con los dems mtodos de ordenamiento. Ya que en s, no depende
directamente de los contenidos de la lista, entonces siempre se ejecuta el bucle
externo n veces para una lista de n elementos y requiere comparar todos los
elementos no clasificados. Por lo que presenta un comportamiento constante,
que hace que en todos los casos posibles la complejidad sea O(n).

Ventajas:

Fcil implementacin.
No requiere memoria adicional.
Realiza pocos intercambios.
Rendimiento constante: poca diferencia entre el peor y el mejor caso.

Desventajas:

Lento.
Realiza numerosas comparaciones.

BURBUJA

11

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

Este es el algoritmo ms sencillo probablemente. Consiste en ciclar repetidamente a


travs de la lista, comparando elementos adyacentes de dos en dos. Si un elemento es
mayor que el que est en la siguiente posicin se intercambian.

Pseudocdigo en C:

12

Mtodos De Ordenamiento Y Anlisis Algortmico


Nombre

Tipo

UTN-FRT
Uso

Vector

Cualquiera (En el ejemplo se


us tipo Entero)

Lista a ordenar

Orden

Entero

Cantidad de valores en la lista

Entero

Contador (Cantidad de recorridos)

Entero

Contador (Para las posiciones de los


elementos a comparar)

Aux

Mismo que el de los elementos


de la lista

Para realizar los intercambios

Ejemplo:
Tenemos 5 elementos. Es decir, Orden toma el valor 5.
43521
Comenzamos comparando el primero con el segundo elemento. 4 es mayor que 3, as
que se intercambian. Ahora tenemos:
3-4-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-2-5-1
13

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

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


3-4-2-1-5
Repitiendo este proceso vamos obteniendo los siguientes resultados:
3-2-1-4-5
2-1-3-4-5
1-2-3-4-5
Optimizando el mtodo burbuja:
Se pueden realizar algunos cambios en este algoritmo que pueden mejorar su
rendimiento.

Si se observa detalladamente, se puede verificar que en cada pasada a travs de


la lista un elemento va quedando en su posicin final. Podemos evitar hacer
comparaciones innecesarias si disminuimos el nmero de stas en cada pasada.
Tan slo hay que cambiar el ciclo interno de esta manera:
for (j=0; j< (Orden i); 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 ejecucin, pues
eso significa que los datos ya estn ordenados.

Analizando el Algoritmo
14

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

Requerimientos de Memoria: Una variable adicional para realizar los


intercambios.
Tiempo de Ejecucin: Para una lista de n elementos el bucle externo se ejecuta
n-1 veces. El bucle interno se ejecuta como mximo una vez en la primera
iteracin, 2 veces en la segunda, 3 veces en la tercera, etc. Esto produce una
complejidad O(n2). Con la diferencia que, en el mejor de los casos, si la lista de
los elementos se encontrara previamente ordenada, el bucle interno
prcticamente no estara trabajando; por lo que el orden de complejidad sera
O(n).

Ventajas:

Fcil implementacin.
Requerimientos mnimos de memoria.

Desventajas:

Lento.
Realiza numerosas comparaciones e intercambios.

Este es un algoritmo lento, pero puede ser de utilidad para listas que ya estn ordenadas
o semiordenadas, porque en ese caso realiza muy pocos desplazamientos.

INSERCION

15

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

Este algoritmo tambin es bastante sencillo. Tambin llamado baraja por simular el
ordenamiento que se hace durante un juego de cartas (se toman las cartas de a una y se
van comparando con las que ya tenemos ordenadas en la mano).
Para simular esto en un programa necesitamos tener en cuenta algo: no podemos
desplazar los elementos as como as o se perder un elemento. Lo que hacemos es
guardar una copia del elemento actual (que sera como la carta que tomamos) y
desplazar todos los elementos mayores hacia la derecha. Luego copiamos el elemento
guardado en la posicin del ltimo elemento que se desplaz.

Pseudocdigo en C:

16

Mtodos De Ordenamiento Y Anlisis Algortmico


Nombre

Tipo

UTN-FRT
Uso

Vector

Cualquiera (En el ejemplo se us


tipo Entero)

Lista a ordenar

Orden

Entero

Cantidad de valores en la lista

Entero

Contador (Posicin del elemento a


ordenar)

Entero

Contador (Posicin de los elementos a


intercambiar)

Aux

Mismo que el de los elementos de


la lista

Para realizar los intercambios

Ejemplo:

17

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

Tenemos la lista:
4-3-5-2-1
Donde Aux toma el valor del segundo elemento, 3. La primera carta es el 4. Ahora
comparamos: 3 es menor que 4. Luego desplazamos el 4 una posicin a la derecha y
despus copiamos el 3 en su lugar.
4-4-5-2-1
3-4-5-2-1
El siguiente elemento es 5. Comparamos con 4. Es mayor que 4, as que no ocurren
intercambios.
Continuamos con el 2. Es menor que cinco: desplazamos el 5 una posicin a la derecha:
3-4-5-5-1
Comparamos con 4: es menor, as que desplazamos el 4 una posicin a la derecha:
3-4-4-5-1
Comparamos con 3, sigue siendo menor, por lo que desplazamos el 3 una posicin a la
derecha:
3-3-4-5-1
Finalmente copiamos el 2 en su posicin final:
2-3-4-5-1
El ltimo elemento a ordenar es el 1. Cinco es mayor que 1, as que lo desplazamos una
posicin a la derecha:
2-3-4-5-5
Continuando con el procedimiento la lista va quedando as:
2-3-4-4-5
2-3-3-4-5
2-2-3-4-5
1-2-3-45

Analizando el Algoritmo
18

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

Requerimientos de Memoria: Una variable adicional para realizar los


intercambios.
Tiempo de Ejecucin: Para una lista de n elementos el bucle externo se ejecuta
n-1 veces. El bucle interno se ejecuta como mximo una vez en la primera
iteracin, 2 veces en la segunda, 3 veces en la tercera, etc. Esto produce una
complejidad O(n2). Pero en el caso que la lista de elementos se encuentre
previamente ordenada, en cada bucle solo se comparar con el elemento de ms
a la derecha lo que generar una complejidad O(n).

Ventajas:

Fcil implementacin.
Requerimientos mnimos de memoria.

Desventajas:

Lento.
Realiza numerosas comparaciones.

En general es un algoritmo lento, pero puede llegar a ser uno de los ms rpidos para
listas con pocos elementos.

RPIDO O QUICKSORT

19

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

Esta es probablemente la tcnica ms rpida conocida. Fue desarrollada por C.A.R.


Hoare en 1960
El algoritmo es el siguiente:

Se elige un elemento cualquiera de la lista, al que llamaremos elemento de


divisin o pivote.

Luego, se busca la posicin que le corresponde en la lista ordenada.


Se acomodan los elementos de la lista a cada lado del elemento de divisin, de
manera que a un lado queden todos los menores que l y al otro los mayores. En
este momento el elemento de divisin separa la lista en dos sublistas.
Realizamos esto de forma recursiva para cada sublista mientras stas tengan un
largo mayor que 1. Una vez terminado este proceso todos los elementos estarn
ordenados.

Nota.
Si se utilizan dos ndices, resultara una manera ms rpida y eficaz: i, al que
llamaremos contador por la izquierda, y j, al que llamaremos contador por la derecha.
El algoritmo es ste:

Recorrer la lista simultneamente con i y j: por la izquierda con i (desde el


primer elemento), y por la derecha con j (desde el ltimo elemento).

Cuando lista[i] sea mayor que el elemento de divisin y lista[j] sea menor, se
los intercambian.
Se repite esto hasta que se crucen los ndices.

El punto en que se cruzan los ndices es la posicin adecuada para colocar el


elemento de divisin, porque sabemos que a un lado los elementos son todos
menores y al otro son todos mayores.

20

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

21

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

Pseudocdigo en C:
Nombre

Tipo

Uso

Vector

Cualquiera (En el ejemplo se us


tipo Entero)

Lista a ordenar

Orden

Entero

Cantidad de valores en la lista

Entero

Contador (Posicin a ordenar)

Entero

Contador (Para la bsqueda del menor


elemento)

Primero

Entero

Primera posicin Sublista

Ultimo

Entero

ltima posicin Sublista

Central

Entero

Valor promedio de la lista - Pivote

Aux

Mismo que el de los elementos de


la lista

Para realizar los intercambios

22

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

Ejemplo:
Tenemos la lista:
5-3-7-6-2-1-4
Comenzamos con la lista completa. El elemento divisor ser el 4:
5-3-7-6-2-1-4
Comparamos con el 5 por la izquierda y el 1 por la derecha.
5-3-7-6-2-1-4
5 es mayor que cuatro y 1 es menor. Intercambiamos:
1-3-7-6-2-5-4
Avanzamos por la izquierda y la derecha:
1-3-7-6-2-5-4
3 es menor que 4: avanzamos por la izquierda. 2 es menor que 4: nos mantenemos ah.
1-3-7-6-2-5-4
Tomamos nuevamente por derecha e izquierda: 7 es mayor que 4 y 2 es menor, por lo
que intercambiamos.
1-3-2-6-7-5-4
Avanzamos por ambos lados:
1-3-2-6-7-5-4
En este momento termina el ciclo principal, porque los ndices se cruzaron. Ahora
intercambiamos Vector[i] con Vector[Ultimo]:
1-3-2-4-7-5-6
Aplicamos recursivamente a la sublista de la izquierda (ndices 0 - 2). Tenemos lo
siguiente:
1-3-2
1 es menor que 2: avanzamos por la izquierda. 3 es mayor: avanzamos por la derecha.
Como se intercambiaron los ndices termina el ciclo. Se intercambia Vector[i] con
Vector[Ultimo]:
1-2-3
23

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

Al llamar recursivamente para cada nueva sublista (Vector[0]-Vector[0] y Vector[2]Vector[2]) se retorna sin hacer cambios.
Segunda sublista: Vector[4]-Vector[6]
7-5-6
5-7-6
5-6-7
Para cada nueva sublista se retorna sin hacer cambios (se cruzan los ndices).
Finalmente, al retornar de la primera llamada se tiene la lista ordenada:
1-2-3-4-5-6-7

Anlisis del Algoritmo:

Requerimientos de Memoria: No requiere memoria adicional en su forma


recursiva. En su forma iterativa la necesita para la pila.

Tiempo de Ejecucin:
o Caso promedio. La complejidad para dividir una lista de n es O(n). Cada
sublista genera en promedio dos sublistas ms de largo n/2. Por lo tanto
la complejidad se define en forma recurrente como:
f(1) = 1
f(n) = n + 2 f(n/2)
La forma cerrada de esta expresin es:
f(n) = n log n
Es decir, la complejidad es O(n log n).
o

El peor caso ocurre cuando la lista ya est ordenada, porque cada


llamada genera slo una sublista (todos los elementos son menores que el
elemento de divisin). En este caso la complejidad ser O(n2). Aunque
existen ciertas optimizaciones para evitar este comportamiento.

24

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

Ventajas:

Muy rpido
No requiere memoria adicional.

Desventajas:

Implementacin un poco ms complicada.


Recursividad (utiliza muchos recursos).
Mucha diferencia entre el peor y el mejor caso.

25

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

MEZCLA O MERGESORT

Este algoritmo se basa en la tcnica Divide y Vencers, en la cual se divide la lista de


n elementos en dos sublistas de n/2 elementos, luego ordena ambas sublistas de forma
recursiva y, por ltimo, mezcla las dos sublistas ordenadas para obtener el resultado del
problema.
Ejemplo:

Como muestra la imagen, tenemos el vector:


1 8 6 4 - 10 5 3 2 22
A este vector se lo divide en dos:
1 8 6 4 10
5 3 2 - 22
Y as sucesivamente hasta que no pueda dividirse ms (es decir que quede solo un
elemento). De all se procede a ordenar por mitades y cada bloque por separado, luego
se pasa a la unin de los bloques ordenando los elementos que iran dentro de l, hasta
que finalmente se llegue a los dos bloques principales, los cuales ya se encuentran
ordenados, y estos intercalados dan por resultado el vector correctamente ordenado:
26

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

1 2 3 4 5 6 8 10 - 22

Anlisis del Algoritmo:

Tiempo de Ejecucin: Este tipo de ordenamiento es del tipo Divide y


vencers por lo que el orden de complejidad ser O(n log n).

Ventajas:

Mtodo estable mientras sea bien implementado


Efectivo para conjuntos de datos que se puedan acceder secuencialmente.

Desventajas:

Su implementacin no recursiva emplea una pila, por lo que necesita un espacio


adicional de memoria para almacenarlo.

Implementacin un poco ms complicada que el promedio.

27

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

Anlisis general de los mtodos de Ordenamiento


A lo largo de esta monografa pudimos ver como cada mtodo presenta ciertas ventajas
y desventajas que hacen que sus usos varen bastante bajo ciertas implementaciones.
Para una pequea cantidad de elementos a ordenar ser ms eficiente usar
algunos algoritmos como el de Seleccin o el de Insercin. Con la diferencia que el
algoritmo de Seleccin no es estable, por lo que se recomendara su uso nicamente
si se buscan ordenar elementos numricos.
Para una lista previamente ordenada, sera conveniente usar el mtodo de
Burbuja, ya que con ste hara falta 1 solo recorrido para determinar que la lista se
encuentra ordenada.
Para listas muy grandes, sera conveniente usar mtodos ms apropiados como el
Rpido (QuickSort) o el de Mezcla (MergeSort). Ya que stos mtodos estn
pensados para ordenar una lista de elementos en la menor cantidad posible de
recorridos. Con la diferencia que el algoritmo de Mezcla presenta mayor estabilidad
que la del algoritmo Rpido. Aunque para ste ltimo existen algunos mtodos de
optimizacin.
Sin embargo, a la hora de ponerlos en prctica, suele suceder que la cantidad de
elementos a ordenar son bastantes y rara vez se encuentran previamente ordenados. Por
lo que se puede realizar una tabla comparativa para ver la eficiencia en general de los
mtodos de ordenamiento previamente analizados.

28

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

Conclusin
En esta monografa se pudo observar que pueden existir muchas formas de resolver un
mismo problema. Y ver como cada una de estas formas de buscar solucin a ese
problema, y que cada una posee ciertas caractersticas que la hace til en relacin a las
formas que pueda tomar ese problema.
Tambin se observ como se puede medir la eficiencia de un algoritmo frente a las
formas que pueda tomar el problema. Tanto en el caso promedio como los casos
extremos. Adems de medir la eficiencia general de los algoritmos de ordenamiento
presentados.

29

Mtodos De Ordenamiento Y Anlisis Algortmico

UTN-FRT

Bibliografa
http://www.monografias.com/trabajos27/complejidad-algoritmica/complejidadalgoritmica.shtml
http://www.lab.dit.upm.es/~lprg/material/apuntes/o/index.html
http://es.wikipedia.org/wiki/An%C3%A1lisis_de_algoritmos
http://es.wikipedia.org/wiki/Complejidad_computacional
http://es.wikipedia.org/wiki/Algoritmo_de_ordenamiento
http://c.conclase.net/orden/
http://www.sw-engineering-candies.com/blog-1/tutorial-performance-impact-of-java-7hotspottm-to-quick-sort-heap-sort-and-bubble-sort-algorithm

30

S-ar putea să vă placă și