Вы находитесь на странице: 1из 13

UNIVERSIDAD NACIONAL DE CAJAMARCA

FACULTAD DE EDUCACIÓN
ESCUELA ACADEMICO PROFESIONAL DE
EDUCACIÓN
ESPECIALIDAD DE MATEMATICA E INFORMATICA

TEMA:
ALGORITMOS DE ORDENAMIENTO DE SELECCION

CURSO : Estructuras Y Algoritmos II


PROFESOR : Sánchez Chávez, Roger Manuel
ESTUDIANTE :

➢ SALAZAR BERNARDO, Jheiner Eleazar

CAJAMARCA-PERÚ
2019
INTRODUCCIÓN

Uno de los problemas fundamentales en la ciencia de la computación es ordenar una lista


de ítems. Existen una infinidad de métodos de ordenamiento, algunos son simples e
intuitivos, como el bubble sort, y otros como son extremadamente complicados, pero
producen los resultados mucho más rápido. En este trabajo se presentan los algoritmos de
ordenamiento más comunes, entre los cuales están los siguientes: Bubble sort, Heap sort,
Insertion sort, Merge sort, Quick sort, Selección sort y Shell sort.
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 populares, 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 realizarán comparaciones en tiempo de
ejecución, prerrequisitos de cada algoritmo, funcionalidad, alcance, etc.
ANALISIS DE ALGORITMOS DE ORDENAMIENTO

1. BUBBLE SORT:
Es el método mas simple y antiguo para ordenar un conjunto de datos, es también
el más lento.
El algoritmo bubble sort tiene dos bucles for internos que recorren el vector
comparando el elemento j-esimo 0-1 con el elemento j-esimo elemento y en caso
de que este sea mayor hace un cambio de los elementos. Al tener dos bucles
internos el comportamiento es en general O(n^2), y en las mejores condiciones se
comporta como O(n).

2. SELECTION SORT:
Este algoritmo trabaja seleccionando ítem mas pequeño a ser ordenado que aun
esta en la lista y luego haciendo un intercambio en el elemento en la siguiente
posición; la complejidad de este algoritmo es O(n^2).
3. INSERTION SORT:
El insertión sort trabaja insertando el ítem en su lugar correspondiente al final de
la lista. Como el bubble sort, este algoritmo se compara como O(n^2), pero a pesar
de tener la misma complejidad este algoritmo es casi el doble más eficiente que el
bubble sort.
El ordenamiento por inserción es una manera muy natural de ordenar para un ser
humano, y puede usarse fácilmente para ordenar un mazo de cartas numeradas en
forma arbitraria. Requiere O operaciones para ordenar una lista de n elementos.
Inicialmente se tiene un solo elemento, que obviamente es un conjunto ordenado.

4. MERGE SORT
El Merge Sort divide ala lista a ser ordenada en dos mitades iguales y las pone en
arrays separadas. Cada array es ordenado recursivamente y luego se juntan en el
array final. Este algoritmo tiene un comportamiento de O(n*Logn).
Implementaciones elementales del Merge sort hacen uso de tres arrays uno para
cada mitad y uno para almacenar el resultado.
El algoritmo aquí presentado mezcla “in suti” los dos arrays para presentar el
resultado uno de ellos por cual solo utiliza dos arrays.
5. QUICK SORT
Es un algoritmo del estilo divide y venceras. Es bastante mas rápido que el Merge
sort.
El algoritmo de recursión consiste en una serie de cuatro pasos :
a. Si hay menos de un elemento a ser ordenado retorna inmediatamente.
b. Tomar un elemento del vector que sirve como “Pivot”
c. Dividir el array en dos partes; una con los elementos mayores y una con los
elementos menores al pivot.
d. Repetir recursivamente al algoritmo para las dos mitades del array original.
La eficiencia de este algoritmo es impactante mayormente por la selección del
elemento que será tomado como pivot. En el peor de los casos el comportamiento
es de la forma O(n^2) y ocurre cuando la lista esta ordenada.
Si el elemento utilizado como pivot se selecciona de forma rondom el
comportamiento se parece a O(n*Logn).

6. HEAP SORT
Es un algoritmo de ordenamiento no recursivo, no estable con complejidad
O(n*logn).
Este algoritmo consiste en almacenar todos los elementos del vector a ordenar en
un montículo(heap), y luego extraer el nodo que queda como nodo raíz del
montículo (cima) en sucesivas iteraciones obteniendo el conjunto ordenado. Basa
su funcionamiento en una propiedad de los montículos, por la cual, la cima
contiene siempre el menor elemento (o el mayor, según se haya definido el
montículo) de todos los almacenados en él. El algoritmo, después de cada
extracción, recoloca en el nodo raíz o cima, la última hoja por la derecha del
último nivel. Lo cual destruye la propiedad heap del árbol. Pero, a continuación
realiza un proceso de "descenso" del número insertado de forma que se elige a
cada movimiento el mayor de sus dos hijos, con el que se intercambia. Este
intercambio, realizado sucesivamente "hunde" el nodo en el árbol restaurando la
propiedad montículo del árbol y dejando paso a la siguiente extracción del nodo
raíz.
El algoritmo, en su implementación habitual, tiene dos fases. Primero una fase de
construcción de un montículo a partir del conjunto de elementos de entrada, y
después, una fase de extracción sucesiva de la cima del montículo.
7. SHELL SORT
Es un algoritmo de ordenamiento. El método se denomina Shell en honor de su
inventor Donald Shell. Su implementación original, requiere O(n2)
comparaciones e intercambios en el peor caso. Un cambio menor presentado en
el libro de V. Pratt produce una implementación con un rendimiento de O(n log2
n) en el peor caso. Esto es mejor que las O(n2) comparaciones requeridas por
algoritmos simples pero peor que el óptimo O(n log n). Aunque es fácil desarrollar
un sentido intuitivo de cómo funciona este algoritmo, es muy difícil analizar su
tiempo de ejecución.
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 sólo una posición cada vez.
COMPARACION DE ALGORITMOS DE ORDENAMIENTO
METODO DE FUNCION COMPLEJIDAD CONCLUSIONES
ORDENAMIENTO
SELECTION Su función es la siguiente: Este algoritmo mejora ligeramente el Respecto a otros como el de
• Buscar el mínimo elemento de la lista. algoritmo de la burbuja. En el caso de burbuja o de inserción directa es
• Intercambiarlo con el primero. tener que ordenar un vector de que no mejora su rendimiento
• Buscar el siguiente mínimo en el resto de enteros, esta mejora no es muy cuando los datos ya están
la lista. sustancial, pero cuando hay que ordenados o parcialmente

• Intercambiarlo con el segundo ordenar un vector de estructuras mas ordenados. Así como en el caso de

Y en general: complejas la operación lanordenacion de burbuja se

• Buscar el mínimo elemento entre una intercambiar() seria más costosa en requeria una única pasada para
posición i y al final de la lista. este caso. detectar que el vector ya esta

• Intercambiar el mínimo con el elemento Este algoritmo realiza muchas menos ordenado y finalizar, en la
de la posision i. operaciones intercambiar() que el de ordenación por selección se
la burbuja por lo que lo mejora en realizan el mismo numero de
algo. pasadas independientemente de si
los datos están ordenados o no,
BUBBLE Funciona revisando cada elemento de la lista que El ordenamiento de la burbuja tiene Puede verse que el numero de
va hacer ordenada con el siguiente, la complejidad 0(n^2) igual que el repeticiones solo depende de n
intercambiándolos de posision si están Enel ordenamiento por selección. Cuando (términos del vector) y no del oden
orden equivocado. Es necesario revisar varias una lista ya esta ordenada a de los términos, esto si pasamos al
veces toda la lista hasta que no se necesiten diferencias del ordenamiento por algoritmo una lista ya ordenada,
intercambios, lo cual significa que la lista esta inserción que pasara por la lista una realizara todas las comparaciones
ordenada. y otra vez y encontrara que no hay exactamente igual que para una
necesidad de intercambiar las lista no ordenada. Este es una
posiciones de los elementos . característica de este algoritmo.
SHELL El algoritmo Shell sort mejora el ordenamiento O(n1.25) El SHELL es una generalización
por inserción comparando elementos separados Modifica los saltos contiguos del ordenamiento por insecion,
por un espacio de varias posiciones. Esto permite resultantes de las comparaciones de teniendo en cuenta dos
que un elemento haga "pasos más grandes" hacia saltos de mayor tamaño y con ello se observaciones:
su posición esperada. Los pasos múltiples sobre consigue que la operación sea mas • El ordenamiento por
los datos se hacen con tamaños de espacio cada rápida. Generalmente se toma como inserción es eficiente si la
vez más pequeños. El último paso del Shell sort salto inicial n/2 ( siendo n el números entrada esta “ casi
es un simple ordenamiento por inserción, pero de elementos), luego se reduce el ordenada”
para entonces, ya está garantizado que los datos salto a la mitad en y cada repetición • El ordenamiento por
del vector están casi ordenados. hasta que el salto es de tamaño 1. inserción es ineficiente, en
general, porque mueve los
valores solamente una
posición.
INSERTION Es una manera muy natural de ordenar para un Este algoritmo es estable en su Consiste en ordenar los elementos
ser humano, y puede usarse fácilmente para ordenación interna. Tiene como de un array en que sus elementos
complejidad y pueden estar ordenados y
ordenar un mazo de cartas numeradas en forma requiere O(n²) operaciones para repetidos. Este método en lo que se
arbitraria. ordenar una lista de n elementos. basa principalmente es en hacer
Inicialmente se tiene un solo elemento, que Y en el mejor de los casos en O(n) sucesivas comparaciones,
obviamente es un conjunto ordenado. Después, esto se da en el caso que el array este definiendo con anterioridad el
cuando hay k elementos ordenados de menor a ordenado. criterio de comparación.
mayor, se toma el elemento k+1 y se compara El algoritmo de este ordenamiento
con todos los elementos ya ordenados, es relativamente sencillo y se
deteniéndose cuando se encuentra un elemento adapta de buena manera en gran
menor (todos los elementos mayores han sido cantidad de situaciones en la vida
desplazados una posición a la derecha) o cuando real, por ejemplo ordenar carpetas
ya no se encuentran elementos (todos los o una mano de naipes en el poker.
elementos fueron desplazados y este es el más
pequeño). En este punto se inserta el
elemento k+1 debiendo desplazarse los demás
elementos.
MERGE La idea de este ordenamiento es dividir la lista a Este ordenamiento es conocido por Es un ordenamiento de mayor
mitad de tamaño y luego tener otras sub listas que su tiempo de ejecución de O(n*logn) eficiencia, pero ocupa mas espacio
haremos el mismo proceso y así sucesivamente en cualquiera de los casos (medio, de memoria y a la vez demora el
hasta llegar partes iguales de las lista de números mejor o peor). La aplicación de este tiempo de ejecución que los otros
para luego mezclarlos, compararlos y ordenarlos. ordenamiento tiene mejor ordenamientos mencionados.
También un mejor rendimiento en
El ordenamiento por mezcla incorpora dos ideas rendimiento que los demás, apartes maquinas que benefician de la
principales para mejorar su tiempo de ejecución: usa demasiado memoria optimización de cache
1. Una lista pequeña necesitará menos
pasos para ordenarse que una lista
grande.
2. Se necesitan menos pasos para construir
una lista ordenada a partir de dos listas
también ordenadas, que a partir de dos
listas desordenadas. Por ejemplo, sólo
será necesario entrelazar cada lista una
vez que están ordenadas.

QUICK • Elegir un elemento del arreglo de Es el algoritmo de ordenación mas Luego de analizarse el metodo se
elementos a ordenar, al que rápido conocido su tiempo de puede ver que es uno de los
llamaremos pivote. Resituar los demás ejecucion en promedio es de mejores métodos de ordenacion
elementos de la lista a cada lado del 0(N*logn) y en el peor de los casos
pivote, de manera que a un lado queden se tarda O(N^2). El hecho por el cual
todos los menores que él, y al otro los es el mas rápido que los demás
mayores. métodos de ordenación.
CONCLUSIONES

Los métodos de ordenamiento de datos son muy útiles, ya que la forma de arreglar
los registros de una tabla en algún orden secuencial de acuerdo a un criterio de
ordenamiento, el cual puede ser numérico, alfabético o alfanumérico, ascendente o
descendente.
Nos facilita las búsquedas de cantidades de registros en un moderado tiempo, en
modelo de eficiencia. Mediante sus técnicas podemos colocar listas detrás de otras y
luego ordenarlas, como también podemos comparar pares de valores de llaves, e
intercambiarlos si no se encuentran en sus posiciones correctas.

Вам также может понравиться