10 Commits

Author SHA1 Message Date
  dylan.cedres d9ec496f93 Adding HeapSort implementation 1 year ago
  dylan.cedres e371c8aa0f Adding heapsort to my branch 1 year ago
  dylan.cedres 94676a46ad Revert "Added Heapsort algorithm" 1 year ago
  cynthiarivera15 09a7ef7a64 merge Cynthia-Quicksort 1 year ago
  dylan.cedres 7eb6233c87 Merge branch 'sortingFinal' of https://git.ccom.uprrp.edu/CCOM4030/AnCyDyJa into sortingFinal 1 year ago
  Jantony Velazquez Gauthier 34af7910c3 Add shellsort 1 year ago
  dylan.cedres 3856a55a76 Added Heapsort algorithm 1 year ago
  AngelRomero5 955a91ca74 Added merge algorithm 1 year ago
  AngelRomero5 2aea5dde9f Added Mergesort algorithm 1 year ago
  cynthiarivera15 8967c40964 Quicksort Algorithm 1 year ago
1 changed files with 31 additions and 43 deletions
  1. 31
    43
      sorting.py

+ 31
- 43
sorting.py View File

@@ -8,7 +8,7 @@ Al final se imprimen los promedios de cada algortimo
8 8
 """
9 9
 from random import randint
10 10
 import time
11
-from heapq import heapify, heappush
11
+from copy import deepcopy
12 12
 
13 13
 def mergeSort(lista):
14 14
 	#definan el algoritmo de ordenamiento mergesort
@@ -18,17 +18,6 @@ def heapSort(lista):
18 18
 	#definan el algoritmo de ordenamiento heapsort
19 19
 	# Dylan A. Cedres Rivera
20 20
 
21
-	"""
22
-	Heapsort se conoce por ser un algoritmo de ordenamiento con las caracteristicas de un arbol binario, 
23
-		en donde cada nodo puede tener un maximo de hasta dos hijos, cumpliendo con las restricciones
24
-		de que el primer nodo debe ser el "nodo padre" (primer elemento en la lista, no puede ser hijo de otro nodo) y
25
-		las "hojas" del arbol binario deben ser solo "nodos hijos" (ultimos elementos de la lista, no pueden ser padres de otros nodos).
26
-	
27
-	El orden del heapsort puede ser MinHeap (menor a mayor), 
28
-		en donde el nodo padre del arbol binario es el elemento mas pequeno de la lista, 
29
-		o puede ser MaxHeap (mayor a menor), en donde el nodo padre es el elemento mas grande de la lista.
30
-	"""
31
-
32 21
 	# Nuevo heap para insertar los elementos de lista creada con numeros aleatorios
33 22
 	myHeap = []
34 23
 	heapify(myHeap)
@@ -57,49 +46,48 @@ def heapSort(lista):
57 46
 	lista = myHeap
58 47
 	return lista
59 48
 
49
+	return lista
50
+
60 51
 def quickSort(lista):
61 52
 	#definan el algoritmo de ordenamiento quicksort
53
+	
62 54
 	return lista
63 55
 
64 56
 def shellSort(lista):
65 57
 	#definan el algoritmo de ordenamiento shellsort
66 58
 	return lista
67 59
 
68
-maxValor=1000 	#define el valor maximo de los elementos de la lista
69
-largoLista=1000 #define el largo de las listas a ordenar
70
-veces=100 		#define las veces que se va a hacer el ordenamiento 
60
+# timeCode function/thunk -> (duration, return value)
61
+# measures the time it takes for a function/thunk to return
62
+def timeCode(fn):
63
+	t1 = time.perf_counter()
64
+	res = fn()
65
+	duration = time.perf_counter() - t1
66
+	return (duration, res)
71 67
 
72
-acumulaMerge=0 	#variable para acumular el tiempo de ejecucion del mergesort
73
-acumulaHeap=0 	#variable para acumular el tiempo de ejecucion del heapsort
74
-acumulaQuick=0 	#variable para acumular el tiempo de ejecucion del quicksort
75
-acumulaShell=0 	#variable para acumular el tiempo de ejecucion del shellsort
68
+maxValor = 1000 	#define el valor maximo de los elementos de la lista
69
+largoLista = 1000 #define el largo de las listas a ordenar
70
+veces = 100 		#define las veces que se va a hacer el ordenamiento
71
+
72
+acumulaMerge = 0 	#variable para acumular el tiempo de ejecucion del mergesort
73
+acumulaHeap = 0 	#variable para acumular el tiempo de ejecucion del heapsort
74
+acumulaQuick = 0 	#variable para acumular el tiempo de ejecucion del quicksort
75
+acumulaShell = 0 	#variable para acumular el tiempo de ejecucion del shellsort
76 76
 
77 77
 for i in range(veces):
78 78
 	mergelista = [randint(0,maxValor) for r in range(largoLista)] #creamos una lista con valores al azar
79
-	heaplista=list(mergelista)
80
-	quicklista=list(mergelista)
81
-	searchlista=list(mergelista)
79
+	heaplista = deepcopy(mergelista)
80
+	quicklista = deepcopy(mergelista)
81
+	searchlista = deepcopy(mergelista)
82 82
 
83
-	t1 = time.clock() 				#seteamos el tiempo al empezar
84
-	mergeSort(mergelista) 				#ejecutamos el algoritmo mergeSort
85
-	acumulaMerge+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
86
-	
87
-	t1 = time.clock()				#seteamos el tiempo al empezar
88
-	heapSort(heaplista)					#ejecutamos el algoritmo heapSort
89
-	acumulaHeap+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
90
-	
91
-	t1 = time.clock()				#seteamos el tiempo al empezar
92
-	quickSort(quicklista)				#ejecutamos el algoritmo quickSort
93
-	acumulaQuick+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
94
-	
95
-	t1 = time.clock()				#seteamos el tiempo al empezar
96
-	shellSort(searchlista)				#ejecutamos el algoritmo shellSort
97
-	acumulaShell+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
83
+	acumulaMerge += timeCode(lambda: mergeSort(mergelista))[0]
84
+	acumulaHeap += timeCode(lambda: heapSort(heaplista))[0]
85
+	acumulaQuick += timeCode(lambda: quickSort(quicklista))[0]
86
+	acumulaShell += timeCode(lambda: shellSort(searchlista))[0]
98 87
 
99 88
 #imprimos los resultados
100
-print( "Promedio de tiempo de ejecucion de "+ str(veces) +" listas de largo " + str(largoLista) )
101
-# print( "MergeSort " + str(acumulaMerge/veces) + " segundos" )
102
-print( "HeapSort " + str(acumulaHeap/veces) + " segundos" )
103
-# print( "QuickSort " + str(acumulaQuick/veces) + " segundos" )
104
-# print( "ShellSort " + str(acumulaShell/veces) + " segundos" )
105
-
89
+print(f"Promedio de tiempo de ejecucion de {str(veces)} listas de largo {str(largoLista)}")
90
+print(f"MergeSort {str(acumulaMerge / veces)} segundos")
91
+print(f"HeapSort {str(acumulaHeap / veces)} segundos")
92
+print(f"QuickSort {str(acumulaQuick / veces)} segundos")
93
+print(f"ShellSort {str(acumulaShell / veces)} segundos")