10 次代码提交

作者 SHA1 备注 提交日期
  dylan.cedres d9ec496f93 Adding HeapSort implementation 1年前
  dylan.cedres e371c8aa0f Adding heapsort to my branch 1年前
  dylan.cedres 94676a46ad Revert "Added Heapsort algorithm" 1年前
  cynthiarivera15 09a7ef7a64 merge Cynthia-Quicksort 1年前
  dylan.cedres 7eb6233c87 Merge branch 'sortingFinal' of https://git.ccom.uprrp.edu/CCOM4030/AnCyDyJa into sortingFinal 1年前
  Jantony Velazquez Gauthier 34af7910c3 Add shellsort 1年前
  dylan.cedres 3856a55a76 Added Heapsort algorithm 1年前
  AngelRomero5 955a91ca74 Added merge algorithm 1年前
  AngelRomero5 2aea5dde9f Added Mergesort algorithm 1年前
  cynthiarivera15 8967c40964 Quicksort Algorithm 1年前
共有 1 个文件被更改,包括 31 次插入43 次删除
  1. 31
    43
      sorting.py

+ 31
- 43
sorting.py 查看文件

@@ -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")