1. UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS JULIO 2015
1
METODOS DE ORDENAMIENTO
FACULTAD DE INGENIERIA DE
SISTEMAS E INFORMATICA
INTEGRANTES:
William Inocencio Romero 14200091
Diego Max López Torres 14200020
Irma Ferrer Anaya 14200133
Miguel De La Cruz Acuña 14200080
Alexandra Jara Coavoy 14200168
Oncoy Corsino Yunior Efrain 14200105
PROFESOR: Santiago Moquillaza Henríquez
CICLO: 2015-I
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
Decana de América, Fundada en 1551
2. UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS JULIO 2015
2
INTRODUCCION
Los algoritmos de ordenamiento nos permiten, como su nombre lo dice,
ordenar. En este caso, nos servirán para ordenar vectores o matrices con
valores asignados aleatoriamente. Nos centraremos en los métodos más
conocidos, analizando la cantidad de comparaciones que suceden, el tiempo
que demora y revisando el código, escrito en Java, de cada algoritmo.
Este informe nos permitirá conocer más a fondo cada método distinto de
ordenamiento, desde uno simple hasta el más complejo. Se realizaran
comparaciones en tiempo de ejecución.
EL ALGORITMO
Explicación del algoritmo
El algoritmo
Complejidad del algoritmo
La complejidad
3. UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS JULIO 2015
3
CONCLUSIONES
Método de ordenamiento por selección:
Su funcionamiento es el siguiente:
Buscar el mínimo elemento de la lista
Intercambiarlo con el primero
Buscar el siguiente mínimo en el resto de la lista
Intercambiarlo con el segundo
Y en general:
Buscar el mínimo elemento entre una posición i y el final de la
lista
Intercambiar el mínimo con el elemento de la posición i
Complejidad:
Este algoritmo mejora ligeramente el algoritmo de la burbuja. En el
caso de tener que ordenar un vector de enteros, esta mejora no es
muy sustancial, pero cuando hay que ordenar un vector de estructuras
más complejas, la operación intercambiar () sería más costosa en
este caso. Este algoritmo realiza muchas menos
operaciones intercambiar () que el de la burbuja, por lo que lo
mejora en algo. Si una de las líneas se sustituyera por intercambiar
(lista[i], lista[j]) tendríamos una versión del algoritmo de la
burbuja (naturalmente eliminando el orden intercambiar del final).
Conclusiones:
Respecto a otros como el de burbuja o de inserción directa es que no
mejora su rendimiento cuando los datos ya están ordenados o
parcialmente ordenados. Así como, por ejemplo, en el caso de la
ordenación de burbuja se requeriría una única pasada para detectar
que el vector ya está ordenado y finalizar, en la ordenación por
selección se realizarían el mismo número de pasadas
independientemente de si los datos están ordenados o no.
4. UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS JULIO 2015
4
Método de ordenamiento por burbuja:
Funciona revisando cada elemento de la lista que va a ser ordenada
con el siguiente, intercambiándolos de posición si están en el orden
equivocado. Es necesario revisar varias veces toda la lista hasta
que no se necesiten más intercambios, lo cual significa que la lista
está ordenada.
Complejidad:
El ordenamiento de burbuja tiene una complejidad Ω(n²) igual que
ordenamiento por selección. Cuando una lista ya está ordenada, a
diferencia del ordenamiento por inserción que pasará por la lista
una vez y encontrará que no hay necesidad de intercambiar las
posiciones de los elementos, el método de ordenación por burbuja
está forzado a pasar por dichas comparaciones, lo que hace que su
complejidad sea cuadrática en el mejor de los casos. Esto lo cataloga
como el algoritmo más ineficiente que existe, aunque para muchos
programadores sea el más sencillo de implementar.
Conclusiones:
Puede verse que el número de repeticiones solo depende de n (términos
del vector) y no del orden de los términos, esto es, si pasamos al
algoritmo una lista ya ordenada, realizará todas las comparaciones
exactamente igual que para una lista no ordenada. Esta es una
característica de este algoritmo.
Método de ordenamiento por Shell:
Complejidad:
5. UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS JULIO 2015
5
El algoritmo de Shell modifica los saltos contiguos resultantes de
las comparaciones por saltos de mayor tamaño y con ello se consigue
que la ordenación sea más rápida. Generalmente se toma como salto
inicial n/2 (siendo n el número de elementos), luego se reduce el
salto a la mitad en cada repetición hasta que el salto es de tamaño
1.
Conclusiones:
El Shell sort es una generalización del ordenamiento por inserción,
teniendo en cuenta dos observaciones:
El ordenamiento por inserción es eficiente si la entrada está
“casi ordenada”.
El ordenamiento por inserción es ineficiente, en general,
porque mueve los valores solamente una posición cada vez.
El algoritmo Shell sort mejora el ordenamiento por inserción
comparando elementos separados por un espacio de varias posiciones.
Esto permite que un elemento haga “pasos más grandes” hacia su
posición esperada. Los pasos múltiples sobre los datos se hacen con
tamaños de espacio cada vez más pequeños. El último paso del Shell
sort es un simple ordenamiento por inserción, pero para entonces, ya
está garantizado que los datos del vector están casi ordenado.
Método de ordenamiento por inserción:
Complejidad:
Este algoritmo es estable en su ordenación interna. Tiene como
complejidad en el peor de los casos de O(n2) y en el mejor de los
casos en O(n) esto se da en el caso que el array esté ordenado.
6. UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS JULIO 2015
6
Conclusión:
Consiste en ordenar los elementos de una array en que sus elementos
pueden estar ordenados y repetidos. Este método en lo que se basa
principalmente es en hacer sucesivas comparaciones, definiendo con
anterioridad el criterio de comparación.
El algoritmo de este ordenamiento es relativamente sencillo y se
adapta de buena manera en gran cantidad de situaciones en la vida
real, por ejemplo: ordenar carpetas o una mano de naipes en el póker.
Método ordenamiento por Quicksort
Complejidad:
Es el algoritmo de ordenación más rápido conocido su tiempo de
ejecución en promedio es de O(N Log(N)) y en el peor de los casos se
tarda O (N2). En su práctica, el hecho por el cual es el más rápido
que los demás métodos de ordenación está dado por un ciclo interno
en el cual cuenta con muy pocas operaciones.
Conclusión:
Luego de analizarse el método se puede ver que es uno de los mejores
métodos de ordenación, a pesar no ser tan sencilla (tampoco es tan
complicada) es un algoritmo con una estructura elegante y con buena
eficiencia. Con este método queda claro que en muchas ocasiones es
mejor dividir para un óptimo desarrollo.
Método de ordenamiento Mezcla ( MergeSort):
La idea de este ordenamiento es dividir la lista a mitad de tamaño
y luego tener otras sub-listas que haremos el mismo proceso y así
7. UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS JULIO 2015
7
sucesivamente hasta llegar partes iguales de la lista de números
para luego mezclarlos, compararlos y ordenarlos.
Complejidad:
Este ordenamiento es conocido por su tiempo de ejecución de
O(nlog(n)) en cualquiera de los casos (medio, mejor o peor). La
aplicación de este ordenamiento tiene mejor rendimiento que los demás
(Quicksort, selección, etc.), aparte que usa más espacio de memoria.
Conclusión:
Es un ordenamiento de mayor eficiencia, pero que ocupa más espacio
de memoria y a la vez demora el tiempo de ejecución que los otros
ordenamientos mencionados. También demostró un mejor rendimiento en
máquinas que se benefician de la optimización caché.