PDF de programación - TP 1: Algoritmos de ordenamiento - Estructura de datos III

Imágen de pdf TP 1:  Algoritmos de ordenamiento - Estructura de datos III

TP 1: Algoritmos de ordenamiento - Estructura de datos IIIgráfica de visualizaciones

Publicado el 15 de Julio del 2020
914 visualizaciones desde el 15 de Julio del 2020
458,7 KB
35 paginas
Creado hace 18a (15/02/2006)
Estructura de datos III



TP 1:

Algoritmos de ordenamiento



___________________________________________________________________
Estructura de datos III
Algoritmos
Página 1 de 33

de

ordenamiento_byPerses.doc





Autor:
[email protected]

Sede:
San Isidro

___________________________________________________________________
Estructura de datos III
Algoritmos
Página 2 de 33

de

ordenamiento_byPerses.doc

Algoritmos de ordenamiento



Resumen
El siguiente trabajo desarrolla el tema de la performance en distintos algoritmos de
ordenamiento y presenta una comparativa de cada uno de ellos, como también el
órden de complejidad de los mismos.
Los algoritmos analizados son:

• Bubble sort
• Selection sort

Insertion sort
• Shell sort
• Heap sort
• Merge sort
• Quick sort

Las implementaciones de los algoritmos han sido realizadas en c++.



___________________________________________________________________
Estructura de datos III
Algoritmos
Página 3 de 33

de

ordenamiento_byPerses.doc

Indice

Introducción.......................................................................................................................................... 4
Análisis de los algoritmos ................................................................................................................ 5
Bubble sort........................................................................................................................................ 5
Selection sort................................................................................................................................... 6
Insertion sort ................................................................................................................................... 7
Merge sort......................................................................................................................................... 9
Quick sort........................................................................................................................................ 14
Heap Sort ........................................................................................................................................ 16
Shell sort ......................................................................................................................................... 17
Conclusiones ....................................................................................................................................... 20
Apéndice............................................................................................................................................... 21
Apéndice 1 - Código fuente del Trabajo Práctico............................................................. 21
Apendice 2 - Análisis de Algoritmos...................................................................................... 30
Apendice 3 - Referencias........................................................................................................... 33



___________________________________________________________________
Estructura de datos III
Algoritmos
Página 4 de 33

de

ordenamiento_byPerses.doc



Introducción.
Uno de los problemas fundamentales en la ciencia de la computación es ordenar una
lista de items. 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, Selection sort y Shell sort.
Los algoritmos de ordenamiento pueden ser divididos en dos clases de acuerdo a la
complejidad de los mismos. La complejidad del algoritmo se denota según la
notación Big-O.

Por ejemplo, O(n) significa que el algoritmo tiene una complejidad lineal. En otras
palabras, toma 10 veces más tiempo en operar un set de 100 datos que en hacerlo
con un set de 10 items. Si la complejidad fuera O(n2) entonces tomaría 100 veces
más tiempo en operar 100 items que en hacerlo con 10.
Adicionalmente a la compejidad de los algoritmos, la velocidad de ejecución puede
cambiar de acuerdo al tipo de dato a ordenar, es por ello que es conveniente
comprar los algoritmos contra datos empíricos. Éstos datos empíricos se deben
elaborar tomando la media de tiempo de ejecución en un conjunto de corridas y con
datos del mismo tipo.

En este trabajo se ejecutaron 10 veces cada algoritmo de ordenamiento con un set
de 10000 datos de tipo entero de c++.
Se realiza también una comprativa con otros tipos de datos como ser el long y el
char para todos los algoritmos y luego se los compara entre cada uno de ellos.
En el gráfico siguiente se puede ver el tiempo de ejecución del algoritmo en función
de la cantidad de elementos, se puede observar que si los elementos a ordenar son
pocos, menos de 1000 casi todos los tienen el mismo tiempo de respuesta, pero si la
cantidad de datos aumenta los tiempos de respuesta van cambiando drásticamente
entre cada uno de los ellos, y para una cantidad de datos de 8000 ya se puede
determinar que el peor algoritmo es el bubble sort, mientras que el mejor es el Heap
sort.

___________________________________________________________________
Estructura de datos III
Algoritmos
Página 5 de 33

de

ordenamiento_byPerses.doc

Comparativa de algoritmos



o
p
m
e
i
T

400
350
300
250
200
150
100
50
0
-50

0

2000

4000
6000
Elementos

8000

10000

Poly. ( Bubble)
Poly. ( Insertion)
Poly. ( Selection)
Poly. ( Quick)
Poly. ( Shell)
Poly. ( Heap)
Poly. ( Merge)



Análisis de los algoritmos

Bubble sort
Este es el método más 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-1 con el elemento con el 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(n2), y en las mejores
condiciones se comporta como O(n).

Bubble sort

o
p
m
e
i
T

400
350
300
250
200
150
100
50
0

0

2000

4000

6000

8000

10000

Elementos



___________________________________________________________________
Estructura de datos III
Algoritmos
Página 6 de 33

de

ordenamiento_byPerses.doc

Como funciona

Consiste en comparar pares de elementos adyacentes e intercambiarlos entre sí
hasta que estén todos ordenados. Con el array anterior, {40,21,4,9,10,35}:



Primera pasada:
{21,40,4,9,10,35} <-- Se cambia el 21 por el 40.
{21,4,40,9,10,35} <-- Se cambia el 40 por el 4.
{21,4,9,40,10,35} <-- Se cambia el 9 por el 40.
{21,4,9,10,40,35} <-- Se cambia el 40 por el 10.
{21,4,9,10,35,40} <-- Se cambia el 35 por el 40.

Segunda pasada:
{4,21,9,10,35,40} <-- Se cambia el 21 por el 4.
{4,9,21,10,35,40} <-- Se cambia el 9 por el 21.
{4,9,10,21,35,40} <-- Se cambia el 21 por el 10.

Ya están ordenados, pero para comprobarlo habría que acabar esta segunda
comprobación y hacer una tercera.

Código fuente

void bubbleSort (int numbers[], int array_size)
{
int i, j, temp;
for (i = (array_size - 1); i >= 0; i--){
for (j = 1; j <= i; j++){
if (numbers[j-1] > numbers[j]){
temp = numbers[j-1];
numbers[j-1] = numbers[j];
numbers[j] = temp;
}
}
}
}

Selection sort
Este algoritmo trabaja seleccionando el item más pequeño a ser ordenado que aún
esta en la lista, y luego haciendo un intercambio con el elemento en la siguiente
posición. La complejidad de este algoritmo es O(n2).

___________________________________________________________________
Estructura de datos III
Algoritmos
Página 7 de 33

de

ordenamiento_byPerses.doc

Selection sort

o
p
m
e
T

i

180
160
140
120
100
80
60
40
20
0

0

2000

4000

6000

8000

10000

Elementos



Como funciona.

Este método consiste en buscar el elemento más pequeño del array y ponerlo en
primera posición; luego, entre los restantes, se busca el elemento más pequeño y se
coloca en segudo lugar, y así sucesivamente hasta colocar el último elemento. Por
ejemplo, si tenemos el array {40,21,4,9,10,35}, los pasos a seguir son:
{4,21,40,9,10,35} <-- Se coloca el 4, el más pequeño, en primera
posición : se cambia el 4 por el 40.
{4,9,40,21,10,35} <-- Se coloca el 9, en segunda posición: se cambia el
9 por el 21.
{4,9,10,21,40,35} <-- Se coloca el 10, en tercera posición: se cambia
el 10 por el 40.
{4,9,10,21,40,35} <-- Se coloca el 21, en tercera posición: ya está
colocado.
{4,9,10,21,35,40} <-- Se coloca el 35, en tercera posición: se cambia
el 35 por el 40.

Código fuente.

void selectionSort(int numbers[], int array_size)
{
int i, j;
int min, temp;

for (i = 0; i < array_size-1; i++){
min = i;
for (j = i+1; j < array_size; j++){
if (numbers[j] < numbers[min])
min = j;

___________________________________________________________________
Estructura de datos III
Algoritmos
Página 8 de 33

de

ordenamiento_byPerses.doc

}
temp = numbers[i];
numbers[i] = numbers[min];
numbers[min] = temp;
}
}

Insertion sort



El insertion sort trabaja insertando el item en su lugar correspondiente al final de la
lista. Como el bubble sort, éste algoritmo se comporta como O(n2), pero a pesar de
tener el misma complejidad, este algoritmo es casi el doble más eficiente que el
bubble sort.

Insertion sort

o
p
m
e
i
T

250

200

150

100

50

0

0

2000

40
  • Links de descarga
http://lwp-l.com/pdf17910

Comentarios de: TP 1: Algoritmos de ordenamiento - Estructura de datos III (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad