|
@@ -3,7 +3,7 @@ Carlos J Corrada Bravo
|
3
|
3
|
Este programa calcula el promedio de tiempo de ejecucion de cuatro algoritmos de ordenamiento
|
4
|
4
|
La variable maxValor define el valor maximo de los elementos de la lista
|
5
|
5
|
La variable largoLista define el largo de las listas a ordenar
|
6
|
|
-La variable veces define las veces que se va a hacer el ordenamiento
|
|
6
|
+La variable veces define las veces que se va a hacer el ordenamiento
|
7
|
7
|
Al final se imprimen los promedios de cada algortimo
|
8
|
8
|
"""
|
9
|
9
|
from heapq import merge
|
|
@@ -66,11 +66,29 @@ def quickSort(lista):
|
66
|
66
|
|
67
|
67
|
def shellSort(lista):
|
68
|
68
|
#definan el algoritmo de ordenamiento shellsort
|
|
69
|
+ #Luis E. Ortiz Cotto
|
|
70
|
+ #Este codigo tiene su base de GeeksforGeeks
|
|
71
|
+ distance = len(lista) / 2 #Coge la distancia de la mitad de la lista
|
|
72
|
+
|
|
73
|
+ while distance > 0:
|
|
74
|
+ for i in range(distance, len(lista)): #Empieza a ordenar haciendo un insertion sort para la distancia
|
|
75
|
+ tmp = lista[i] #Guarda temporeramente el valor que esta en la posicion i que se va a cambiar
|
|
76
|
+ j = i #Tiene el valor que va al momento
|
|
77
|
+
|
|
78
|
+ #Empieza a ordernar los elementos hasta que llegue a la localizacion donde esta el valor temporero
|
|
79
|
+ while j >= distance and lista[j - distance] > tmp:
|
|
80
|
+ lista[j] = lista[j - distance]
|
|
81
|
+ j -= distance
|
|
82
|
+
|
|
83
|
+ #Poner el valor temporero en el su posicion correcta
|
|
84
|
+ lista[j] = tmp
|
|
85
|
+ distance /= 2 #Coge la mitad otra vez de la que ya esta
|
|
86
|
+
|
69
|
87
|
return lista
|
70
|
88
|
|
71
|
89
|
maxValor=1000 #define el valor maximo de los elementos de la lista
|
72
|
90
|
largoLista=1000 #define el largo de las listas a ordenar
|
73
|
|
-veces=100 #define las veces que se va a hacer el ordenamiento
|
|
91
|
+veces=100 #define las veces que se va a hacer el ordenamiento
|
74
|
92
|
|
75
|
93
|
acumulaMerge=0 #variable para acumular el tiempo de ejecucion del mergesort
|
76
|
94
|
acumulaHeap=0 #variable para acumular el tiempo de ejecucion del heapsort
|
|
@@ -86,15 +104,15 @@ for i in range(veces):
|
86
|
104
|
t1 = time.clock() #seteamos el tiempo al empezar
|
87
|
105
|
mergeSort(mergelista) #ejecutamos el algoritmo mergeSort
|
88
|
106
|
acumulaMerge+=time.clock()-t1 #acumulamos el tiempo de ejecucion
|
89
|
|
-
|
|
107
|
+
|
90
|
108
|
t1 = time.clock() #seteamos el tiempo al empezar
|
91
|
109
|
heapSort(heaplista) #ejecutamos el algoritmo heapSort
|
92
|
110
|
acumulaHeap+=time.clock()-t1 #acumulamos el tiempo de ejecucion
|
93
|
|
-
|
|
111
|
+
|
94
|
112
|
t1 = time.clock() #seteamos el tiempo al empezar
|
95
|
113
|
quickSort(quicklista) #ejecutamos el algoritmo quickSort
|
96
|
114
|
acumulaQuick+=time.clock()-t1 #acumulamos el tiempo de ejecucion
|
97
|
|
-
|
|
115
|
+
|
98
|
116
|
t1 = time.clock() #seteamos el tiempo al empezar
|
99
|
117
|
shellSort(searchlista) #ejecutamos el algoritmo shellSort
|
100
|
118
|
acumulaShell+=time.clock()-t1 #acumulamos el tiempo de ejecucion
|
|
@@ -105,4 +123,3 @@ print "MergeSort " + str(acumulaMerge/veces) + " segundos"
|
105
|
123
|
print "HeapSort " + str(acumulaHeap/veces) + " segundos"
|
106
|
124
|
print "QuickSort " + str(acumulaQuick/veces) + " segundos"
|
107
|
125
|
print "ShellSort " + str(acumulaShell/veces) + " segundos"
|
108
|
|
-
|