Académique Documents
Professionnel Documents
Culture Documents
ALGORITMOS DE
ORDENACION
Maestra en Ingeniera de Sistemas y
Computo
10/08/2012
Contenido
Resumen ............................................................................................................................................................. 5
Abstract .............................................................................................................................................................. 5
I.
INTRODUCCION ..................................................................................................................................... 5
II.
OBJETIVOS .............................................................................................................................................. 5
III.
A.
B.
IV.
A.
B.
C.
D.
E.
F.
G.
Counting Sort....................................................................................................................................... 9
H.
I.
V.
B.
C.
D.
E.
F.
G.
Counting Sort..................................................................................................................................... 16
H.
I.
VI.
A.
B.
C.
D.
E.
F.
Counting Sort..................................................................................................................................... 23
G.
H.
I.
J.
K.
VII.
CONCLUSIONES .............................................................................................................................. 27
RESUMEN
El presente documento presenta la implementacin y prueba de varios algoritmos de ordenamiento en Matlab,
con el fin de determinar la eficiencia en tiempo y espacio de almacenamiento de cada algoritmo.
Palabras Clave Insertion Sort, Binary Insertion Sort, Merge Sort, Heap Sort, Quick Sort, Counting Sort,
Bubble Sort, Selection Sort, y Heapinsert Sort..
ABSTRACT
This paper presents the implementation and testing of several sorting algorithms in Matlab, to determine the
efficiency in time and storage for each algorithm.
Keywords Insertion Sort, Binary Insertion Sort, Merge Sort, Heap Sort, Quick Sort, Counting Sort, Bubble
Sort, Selection Sort, y Heapinsert Sort.
I. INTRODUCCION
n la computacin los algorimos de ordenamiento se encargan, como su nombre lo dice, de organizar todos
los elementos de un vector o arreglos de datos. Por lo tanto estos algoritmos tienen como entrada el vector
en desorden, y como salida el vector ordenado.
Adems, hay que tener en cuenta que dichos algoritmos son estn amarrados a complejidades distintas, por lo
tanto todos realizan el mismo trabajo pero con eficiencias diferentes. Los algoritmos que se analizaron en este
documento son:
Algoritmo
Insertion Sort
Binary Insertion Sort
Merge Sort
Heap Sort
Quick Sort
Counting Sort
Bubble Sort
Selection Sort
Heapinsert Sort.
Complejidad
(n2)
(n2)
(n log n)
(n log n)
(n log n)
(n)
(n2)
(n2)
(n2)
II. OBJETIVOS
Analizar los diferentes algoritmos de ordenamiento desde dos puntos de vista: complejidad espacial
y temporal.
A continuacin se presentan los datos de los tiempos de ejecucin, consumo de espacio de almacenamiento y
factores constantes que fueron tomados durante la prctica para cada uno de los algoritmos.
A. Insertion Sort
Entrada (n)
50000
100000
150000
200000
250000
300000
350000
400000
450000
500000
Complejidad (n^2)
2500000000
10000000000
22500000000
40000000000
62500000000
90000000000
1.225E+11
1.6E+11
2.025E+11
2.5E+11
Factor Constante
1.4055E-08
1.41818E-08
1.41975E-08
1.41061E-08
1.41107E-08
1.41739E-08
1.41591E-08
1.42085E-08
1.40962E-08
1.41686E-08
1.41457E-08
Entrada (n)
50000
100000
150000
200000
250000
300000
350000
400000
450000
500000
Factor Constante
1.37703E-08
1.36576E-08
1.36248E-08
1.37255E-08
1.36972E-08
1.35985E-08
1.35721E-08
1.37541E-08
1.36169E-08
1.363E-08
1.36647E-08
C. Merge Sort
Entrada (n)
50000
100000
150000
200000
250000
300000
350000
400000
450000
500000
1000000
Complejidad (n Log n)
234948.5002
500000
776413.6889
1060205.999
1349485.002
1643136.376
1940423.816
2240823.997
2543945.631
2849485.002
6000000
Factor Constante
2.59977E-05
4.15783E-05
5.53272E-05
7.01552E-05
8.82455E-05
0.000112059
0.000140247
0.000162336
0.000187395
0.000208095
0.000368203
0.000132695
D. Heap Sort
Entrada (n)
50000
100000
150000
200000
250000
300000
350000
400000
450000
500000
1000000
2000000
3000000
4000000
5000000
6000000
7000000
8000000
9000000
10000000
11000000
12000000
13000000
14000000
15000000
16000000
17000000
18000000
19000000
20000000
Complejidad (n Log n)
234948.5002
500000
776413.6889
1060205.999
1349485.002
1643136.376
1940423.816
2240823.997
2543945.631
2849485.002
6000000
12602059.99
19431363.76
26408239.97
33494850.02
40668907.5
47915686.28
55224719.9
62588182.58
70000000
77455319.54
84950174.95
92481263.58
100045792.5
107641368.9
115265919.7
122917631.7
130594905.1
138296318.4
146020599.9
Factor Constante
2.6397E-05
2.61973E-05
2.61606E-05
2.65806E-05
2.68158E-05
2.67578E-05
2.68973E-05
2.63335E-05
2.68476E-05
2.65688E-05
2.62103E-05
2.65667E-05
2.66251E-05
2.66353E-05
2.66105E-05
2.66434E-05
2.67953E-05
2.67429E-05
2.66495E-05
2.67384E-05
2.64087E-05
2.63292E-05
2.65415E-05
2.66331E-05
2.66901E-05
2.63775E-05
2.64554E-05
2.65343E-05
2.64964E-05
2.65501E-05
2.65016E-05
E. Selection Sort
Entrada (n)
50000
100000
150000
200000
250000
300000
350000
400000
450000
500000
Complejidad (n^2)
2500000000
10000000000
22500000000
40000000000
62500000000
90000000000
1.225E+11
1.6E+11
2.025E+11
2.5E+11
Factor Constante
6.13035E-09
6.08363E-09
6.05693E-09
6.04713E-09
6.07399E-09
6.08101E-09
6.10727E-09
6.08869E-09
6.04147E-09
6.11112E-09
6.08216E-09
F. Quick Sort
Entrada (n)
50000
100000
150000
200000
250000
300000
350000
400000
450000
500000
1000000
2000000
3000000
4000000
5000000
6000000
7000000
8000000
9000000
10000000
11000000
12000000
13000000
14000000
15000000
16000000
17000000
18000000
19000000
20000000
Complejidad (n Log n)
234948.5002
500000
776413.6889
1060205.999
1349485.002
1643136.376
1940423.816
2240823.997
2543945.631
2849485.002
6000000
12602059.99
19431363.76
26408239.97
33494850.02
40668907.5
47915686.28
55224719.9
62588182.58
70000000
77455319.54
84950174.95
92481263.58
100045792.5
107641368.9
115265919.7
122917631.7
130594905.1
138296318.4
146020599.9
Factor Constante
3.60516E-06
3.64954E-06
3.6486E-06
3.51923E-06
3.80196E-06
3.11414E-06
3.69784E-06
3.17665E-06
3.06085E-06
3.54162E-06
3.26691E-06
2.96993E-06
3.19027E-06
3.29255E-06
2.82027E-06
3.14937E-06
2.92782E-06
2.91364E-06
2.58397E-06
3.06448E-06
2.76144E-06
3.23038E-06
3.05117E-06
3.39214E-06
3.1073E-06
2.78216E-06
2.71897E-06
3.27097E-06
3.18051E-06
3.4673E-06
3.19857E-06
G. Counting Sort
Los datos del couting sort no fueron posibles de tomar, el algoritmo funciono bien, pero los tiempos fueron
demasiado largos, por lo tanto no lo pudimos implementar.
H. Bubble Sort
Entrada (n)
50000
100000
150000
200000
250000
300000
350000
400000
450000
500000
Complejidad (n^2)
2500000000
10000000000
22500000000
40000000000
62500000000
90000000000
1.225E+11
1.6E+11
2.025E+11
2.5E+11
Factor Constante
2.21942E-08
2.21848E-08
2.19467E-08
2.19752E-08
2.21044E-08
2.21661E-08
2.20843E-08
2.20636E-08
2.17813E-08
2.21329E-08
2.20633E-08
I. Heapinsert Sort.
Entrada (n)
50000
100000
150000
200000
250000
300000
350000
400000
450000
500000
10
Complejidad (n^2)
2500000000
10000000000
22500000000
40000000000
62500000000
90000000000
1.225E+11
1.6E+11
2.025E+11
2.5E+11
Factor Constante
6.46591E-09
6.38763E-09
6.34931E-09
6.30454E-09
6.33105E-09
6.30978E-09
6.33166E-09
6.27853E-09
6.29273E-09
6.3165E-09
6.33676E-09
Con los factores constantes de cada uno de los algoritmos se infieren los tiempos de ejecucin para cada uno
de ellos con entradas de tamao: 200000.000, 210000.000, 220000.000,... , 290000.000.
A continuacin se presentan los datos inferidos a partir de los factores constantes y se comparan con los
tiempos tomados en tiempo real de ejecucin.
A. Insertion Sort
Entrada (n)
200,000,000
210,000,000
220,000,000
230,000,000
240,000,000
250,000,000
260,000,000
270,000,000
280,000,000
290,000,000
Entrada (n)
50000
100000
150000
200000
250000
300000
350000
400000
450000
500000
11
Entrada (n)
200,000,000
210,000,000
220,000,000
230,000,000
240,000,000
250,000,000
260,000,000
270,000,000
280,000,000
290,000,000
Entrada (n)
50000
100000
150000
200000
250000
300000
350000
400000
450000
500000
C. Merge Sort
Entrada (n)
200,000,000
210,000,000
220,000,000
230,000,000
240,000,000
250,000,000
260,000,000
270,000,000
280,000,000
290,000,000
12
Entrada (n)
50000
100000
150000
200000
250000
300000
350000
400000
450000
500000
1000000
D. Bubble Sort
Entrada (n)
200,000,000
210,000,000
220,000,000
230,000,000
240,000,000
250,000,000
260,000,000
270,000,000
280,000,000
290,000,000
Entrada (n)
50000
100000
150000
200000
250000
300000
350000
400000
450000
500000
13
E. Heap Sort
Entrada (n)
200,000,000
210,000,000
220,000,000
230,000,000
240,000,000
250,000,000
260,000,000
270,000,000
280,000,000
290,000,000
Entrada (n)
50000
100000
150000
200000
250000
300000
350000
400000
450000
500000
1000000
2000000
3000000
4000000
5000000
6000000
7000000
8000000
9000000
10000000
11000000
12000000
13000000
14000000
15000000
16000000
17000000
18000000
19000000
20000000
14
F. Quick Sort
Entrada (n)
200,000,000
210,000,000
220,000,000
230,000,000
240,000,000
250,000,000
260,000,000
270,000,000
280,000,000
290,000,000
Entrada (n)
50000
100000
150000
200000
250000
300000
350000
400000
450000
500000
1000000
2000000
3000000
4000000
5000000
6000000
7000000
8000000
9000000
10000000
11000000
12000000
13000000
14000000
15000000
16000000
17000000
18000000
19000000
20000000
15
G. Counting Sort
Los datos del couting sort no fueron posibles de tomar, el algoritmo funciono bien, pero los tiempos fueron
demasiado largos, por lo tanto no lo pudimos implementar.
H. Selection Sort
Entrada (n)
200,000,000
210,000,000
220,000,000
230,000,000
240,000,000
250,000,000
260,000,000
270,000,000
280,000,000
290,000,000
Entrada (n)
50000
100000
150000
200000
250000
300000
350000
400000
450000
500000
I. Heapinsert Sort.
Entrada (n)
200,000,000
210,000,000
220,000,000
230,000,000
240,000,000
250,000,000
260,000,000
270,000,000
280,000,000
290,000,000
Entrada (n)
50000
100000
150000
200000
250000
300000
350000
400000
450000
500000
17
18
19
C. Merge Sort
20
D. Heap Sort
21
E. Quick Sort
22
F. Counting Sort
Los datos del couting sort no fueron posibles de tomar, el algoritmo funciono bien, pero los tiempos fueron
demasiado largos, por lo tanto no lo pudimos implementar.
G. Bubble Sort
23
H. Selection Sort
24
I. Heapinsert Sort.
25
26
VII. CONCLUSIONES
Al analizar las grficas de los algoritmos de ordenamiento n2 se observa que presentan una curva
caracterstica parablica, es decir y = Cx2, lo que concuerda con la complejidad terica obtenida. Por otro
lado, para entradas de datos elevadas su comportamiento es lineal (y = mx), debido a que para valores de n
muy grande la velocidad con que crece la parbola es muy alta haciendo que su abertura no cambie.
Comparando los tiempos de ejecucin para la misma cantidad de datos, podemos observar que los 5
algoritmos de complejidad n2 desde el ms lento hasta el ms rpido son: bubble sort, insertion sort, binary
insertion sort, heapInsertion sort y selection sort, respectivamente. La relacin aproximada en velocidad es 3
a 1 entre el algoritmo ms veloz y el ms lento, y est dada por el factor constante de cada uno de ellos.
Los algoritmos de ordenamiento con complejidad n*lg10n presentan una curva caracterstica que se aproxima
a una lnea recta y = mx, con pendiente m = lg10n. Para entradas de datos muy grandes el logaritmo de n es
casi constante y la aproximacin a una recta es cada vez mejor.
El comportamiento obtenido con el algoritmo Merge Sort es el de un n2 y a priori ello obedece a que Matlab
es un lenguaje de programacin que no est diseado para trabajar con algoritmos recursivos que demandan
altos recursos de memoria.
Los tiempos esperados de ejecucin que fueron calculados para cada uno de los algoritmos mostraron el
comportamiento esperado, a excepcin del algoritmo quick sort, que aunque sigue una tendencia lineal
muestra cierta varianza entre cada uno de los diferentes tamaos de los vectores.
En los algoritmos que ordenan en el lugar, el clculo de consumo de memoria es directo debido a que est
relacionada directamente con el tamao n del vector a ordenar. Los algoritmos que requieren mayor consumo
de memoria son Couting Sort y Merge Sort puesto que son algoritmos que requieren hacer copias de subvectores.
Gracias a que se emplearon enteros de 8 bytes para representar los datos, en todos los algoritmos se
obtuvieron tiempos de ordenamiento elevados como resultado del proceso interno que debe hacer el
computador para comparar dos enteros de mayor longitud. Por su parte, la carga computacional impuesta por
Matlab tambin aporta a que los tiempos sean altos.
Para nuestro desarrollo utilizamos la herramienta Matlab. Se escogi ya que en un principio se pens en su
gran versatilidad para la simulacin, pero hemos comparado nuestros resultados con los de otros grupos y
hemos podido evidenciar que para este tipo de trabajo no es tan eficiente como si lo son lenguajes de
programacin como C++ o Java.
27