12 次程式碼提交

作者 SHA1 備註 提交日期
  Ricardo-gonzalez32 73098df823 Merge branch 'sortingQuicksort' into sortingFinal 2 年之前
  Ricardo-gonzalez32 05bed1d51e added quicksort function 2 年之前
  Orlando04 dccc7c78af formating the comments 2 年之前
  luislopez66 464657edf6 Updated sorting.py by removing time.clock() due to issues and adding merge, heap, and shell sorts' codes 2 年之前
  luislopez66 6ba31b4492 Update sorting.py by removing time.clock() and adding merge, heap, and shellsort codes 2 年之前
  luislopez66 ebbb999c65 Update sorting.py by adding heap sort code 2 年之前
  luislopez66 1d550b982b Update sorting.py by adding heap sort´s code 2 年之前
  luislopez66 a31ca6e2cf Update sorting.py 2 年之前
  luislopez66 0cdb88c730 Update sorting.py and removing time.clock() due to issues 2 年之前
  luislopez66 1c110fa36b Update sorting.py by adding heap sort's code 2 年之前
  luislopez66 43ff65729d Adding heap sort code which I found online; edited and gave credit to the author(s), and heap.py 2 年之前
  luislopez66 3acb8bc80f Create sorting.py 2 年之前
共有 1 個檔案被更改,包括 84 行新增33 行删除
  1. 84
    33
      sorting.py

+ 84
- 33
sorting.py 查看文件

@@ -9,6 +9,7 @@ Al final se imprimen los promedios de cada algortimo
9 9
 from random import randint
10 10
 import time
11 11
 from merge import merge
12
+import heapify  # Se importa esa librería para usar heapify
12 13
 
13 14
 '''
14 15
  Python program for implementation of MergeSort  taken from https://www.geeksforgeeks.org/python-program-for-merge-sort/#:~:text=Merge%20Sort%20is%20a%20Divide,assumes%20that%20arr%5Bl..
@@ -30,13 +31,66 @@ def mergeSort(lista, l, r):
30 31
 		merge(lista, l, m, r)
31 32
 
32 33
 
34
+""" Código tomado de GeeksForGeeks.
35
+	Enlace electrónico del código 
36
+ 	encontrado y adaptado para la
37
+  	asignación o el proyecto de prác-
38
+   	tica con git: https://www.geeksforgeeks.org/heap-sort/
39
+"""
40
+
41
+
33 42
 def heapSort(lista):
34
-	# definan el algoritmo de ordenamiento heapsort
43
+	#definan el algoritmo de ordenamiento heapsort
44
+	heapq.heapify(lista)
45
+
46
+	# Se busca el tamaño de la lista
47
+	n = len(lista)
48
+
49
+	""" Se crea un heap máximo y el último padre estará en
50
+		la posición h1, i.e., la mitad del tamaño de la lista.
51
+		Por lo tanto, ese sería el comienzo. 
52
+	"""
53
+	h1 = (n // 2) - 1
54
+	for i in range(h1, -1, -1):
55
+		heapq.heapify(lista[i])
56
+
57
+	# Se extrae los elementos uno a uno
58
+	for i in range(n-1, 0, -1):
59
+		# Se intercambia, luego se hace heapify
60
+		lista[i], lista[0] = lista[0], lista[i]
61
+		heapq.heapify(lista[i])
62
+
35 63
 	return lista
36 64
 
37 65
 
38 66
 def quickSort(lista):
39
-	# definan el algoritmo de ordenamiento quicksort
67
+	#definan el algoritmo de ordenamiento quicksort
68
+	elements = len(lista)
69
+    
70
+    #Base case
71
+	if elements < 2:
72
+		return lista
73
+    
74
+	current_position = 0 #Position of the partitioning element
75
+
76
+	for i in range(1, elements): #Partitioning loop
77
+		if lista[i] <= lista[0]:
78
+			current_position += 1
79
+			temp = lista[i]
80
+			lista[i] = lista[current_position]
81
+			lista[current_position] = temp
82
+
83
+	temp = lista[0]
84
+	lista[0] = lista[current_position] 
85
+	lista[current_position] = temp #Brings pivot to it's appropriate position
86
+    
87
+	left = quickSort(lista[0:current_position]) #Sorts the elements to the left of pivot
88
+	right = quickSort(lista[current_position+1:elements]) #sorts the elements to the right of pivot
89
+
90
+	lista = left + [lista[current_position]] + right #Merging everything together
91
+
92
+	
93
+    
40 94
 	return lista
41 95
 
42 96
 
@@ -69,44 +123,41 @@ def shellSort(lista):
69 123
 	return lista
70 124
 
71 125
 
72
-maxValor = 1000  # define el valor maximo de los elementos de la lista
73
-largoLista = 1000  # define el largo de las listas a ordenar
74
-veces = 100  # define las veces que se va a hacer el ordenamiento
126
+maxValor = 1000  		# define el valor maximo de los elementos de la lista
127
+largoLista = 1000  		# define el largo de las listas a ordenar
128
+veces = 100  			# define las veces que se va a hacer el ordenamiento
75 129
 
76 130
 acumulaMerge = 0  # variable para acumular el tiempo de ejecucion del mergesort
77
-acumulaHeap = 0  # variable para acumular el tiempo de ejecucion del heapsort
131
+acumulaHeap = 0   # variable para acumular el tiempo de ejecucion del heapsort
78 132
 acumulaQuick = 0  # variable para acumular el tiempo de ejecucion del quicksort
79 133
 acumulaShell = 0  # variable para acumular el tiempo de ejecucion del shellsort
80 134
 
81 135
 for i in range(veces):
82
-	mergelista = [randint(0, maxValor) for r in range(largoLista)]  # creamos una lista con valores al azar
136
+	# creamos una lista con valores al azar
137
+	mergelista = [randint(0, maxValor) for r in range(largoLista)]
83 138
 	heaplista = list(mergelista)
84 139
 	quicklista = list(mergelista)
85 140
 	searchlista = list(mergelista)
86 141
 
87
-	t1 = time.process_time()  # tomamos el tiempo inicial
88
-	mergeSort(mergelista, 0, len(mergelista) - 1)  # ejecutamos el algoritmo mergeSort
89
-	acumulaMerge += time.process_time() - t1  # acumulamos el tiempo de ejecucion
90
-	print(mergelista)  # desplegamos la lista
91
-
92
-	t1 = time.process_time()  # tomamos el tiempo inicial
93
-	heapSort(heaplista)  # ejecutamos el algoritmo heapSort
94
-	acumulaHeap += time.process_time() - t1  # acumulamos el tiempo de ejecucion
95
-	# print(heaplista)						#desplegamos la lista
96
-
97
-	t1 = time.process_time()  # tomamos el tiempo inicial
98
-	quickSort(quicklista)  # ejecutamos el algoritmo quickSort
99
-	acumulaQuick += time.process_time() - t1  # acumulamos el tiempo de ejecucion
100
-	# print(quicklista)						#desplegamos la lista
101
-
102
-	t1 = time.process_time()  # tomamos el tiempo inicial
103
-	shellSort(searchlista)  # ejecutamos el algoritmo shellSort
104
-	acumulaShell += time.process_time() - t1  # acumulamos el tiempo de ejecucion
105
-	print(searchlista)  # desplegamos la lista
106
-
107
-# imprimos los resultados
108
-print("Promedio de tiempo de ejecucion de " + str(veces) + " listas de largo " + str(largoLista))
109
-print("MergeSort " + str(acumulaMerge / veces) + " segundos")
110
-print("HeapSort " + str(acumulaHeap / veces) + " segundos")
111
-print("QuickSort " + str(acumulaQuick / veces) + " segundos")
112
-print("ShellSort " + str(acumulaShell / veces) + " segundos")
142
+	t1 = time.clock()  						# seteamos el tiempo al empezar
143
+	mergeSort(mergelista)  					# ejecutamos el algoritmo mergeSort
144
+	acumulaMerge += time.process_time()-t1  # acumulamos el tiempo de ejecucion
145
+
146
+	t1 = time.clock()  						# seteamos el tiempo al empezar
147
+	heapSort(heaplista)  					# ejecutamos el algoritmo heapSort
148
+	acumulaHeap += time.process_time()-t1   # acumulamos el tiempo de ejecucion
149
+
150
+	t1 = time.clock()  						# seteamos el tiempo al empezar
151
+	quickSort(quicklista)  					# ejecutamos el algoritmo quickSort
152
+	acumulaQuick += time.process_time()-t1  # acumulamos el tiempo de ejecucion
153
+
154
+	t1 = time.clock()  						# seteamos el tiempo al empezar
155
+	shellSort(searchlista)  				# ejecutamos el algoritmo shellSort
156
+	acumulaShell += time.process_time()-t1  # acumulamos el tiempo de ejecucion
157
+
158
+#imprimos los resultados
159
+print ("Promedio de tiempo de ejecucion de " + str(veces) + " listas de largo " + str(largoLista))
160
+print ("MergeSort " + str(acumulaMerge/veces) + " segundos")
161
+print ("HeapSort " + str(acumulaHeap/veces) + " segundos")
162
+print ("QuickSort " + str(acumulaQuick/veces) + " segundos")
163
+print ("ShellSort " + str(acumulaShell/veces) + " segundos")