Browse Source

Added heapSort() implementation. Changed clock() function, which is deprecated to process_time() function. Added parenthesis to the prints, required for newer versions of python.

Ernesto Ortiz 3 years ago
parent
commit
ea619bf96b
1 changed files with 58 additions and 17 deletions
  1. 58
    17
      sorting.py

+ 58
- 17
sorting.py View File

13
 	#definan el algoritmo de ordenamiento mergesort
13
 	#definan el algoritmo de ordenamiento mergesort
14
 	return lista
14
 	return lista
15
 
15
 
16
+
17
+# Tomada de: https://www.geeksforgeeks.org/heap-sort/
18
+# To heapify subtree rooted at index i.
19
+# n is size of heap 
20
+def heapify(arr, n, i):
21
+    largest = i  # Initialize largest as root
22
+    l = 2 * i + 1     # left = 2*i + 1
23
+    r = 2 * i + 2     # right = 2*i + 2
24
+ 
25
+    # See if left child of root exists and is
26
+    # greater than root
27
+    if l < n and arr[largest] < arr[l]:
28
+        largest = l
29
+ 
30
+    # See if right child of root exists and is
31
+    # greater than root
32
+    if r < n and arr[largest] < arr[r]:
33
+        largest = r
34
+ 
35
+    # Change root, if needed
36
+    if largest != i:
37
+        arr[i], arr[largest] = arr[largest], arr[i]  # swap
38
+ 
39
+        # Heapify the root.
40
+        heapify(arr, n, largest)
41
+
42
+# Tomada de: https://www.geeksforgeeks.org/heap-sort/
16
 def heapSort(lista):
43
 def heapSort(lista):
17
 	#definan el algoritmo de ordenamiento heapsort
44
 	#definan el algoritmo de ordenamiento heapsort
45
+	n = len(lista)
46
+ 
47
+    # Build a maxheap.
48
+	for i in range(n//2 - 1, -1, -1):
49
+		heapify(lista, n, i)
50
+ 
51
+    # One by one extract elements
52
+	for i in range(n-1, 0, -1):
53
+		lista[i], lista[0] = lista[0], lista[i]  # swap
54
+		heapify(lista, i, 0)
55
+ 
18
 	return lista
56
 	return lista
19
 
57
 
58
+
20
 def quickSort(lista):
59
 def quickSort(lista):
21
 	#definan el algoritmo de ordenamiento quicksort
60
 	#definan el algoritmo de ordenamiento quicksort
22
 	return lista
61
 	return lista
23
 
62
 
63
+
24
 def shellSort(lista):
64
 def shellSort(lista):
25
 	#definan el algoritmo de ordenamiento shellsort
65
 	#definan el algoritmo de ordenamiento shellsort
26
 	return lista
66
 	return lista
27
 
67
 
68
+
28
 maxValor=1000 	#define el valor maximo de los elementos de la lista
69
 maxValor=1000 	#define el valor maximo de los elementos de la lista
29
 largoLista=1000 #define el largo de las listas a ordenar
70
 largoLista=1000 #define el largo de las listas a ordenar
30
 veces=100 		#define las veces que se va a hacer el ordenamiento 
71
 veces=100 		#define las veces que se va a hacer el ordenamiento 
37
 for i in range(veces):
78
 for i in range(veces):
38
 	lista = [randint(0,maxValor) for r in range(largoLista)] #creamos una lista con valores al azar
79
 	lista = [randint(0,maxValor) for r in range(largoLista)] #creamos una lista con valores al azar
39
 
80
 
40
-	t1 = time.clock() 				#seteamos el tiempo al empezar
41
-	mergeSort(lista) 				#ejecutamos el algoritmo mergeSort
42
-	acumulaMerge+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
81
+	t1 = time.process_time()				#seteamos el tiempo al empezar
82
+	mergeSort(lista) 						#ejecutamos el algoritmo mergeSort
83
+	acumulaMerge+=time.process_time()-t1 	#acumulamos el tiempo de ejecucion
43
 	
84
 	
44
-	t1 = time.clock()				#seteamos el tiempo al empezar
45
-	heapSort(lista)					#ejecutamos el algoritmo heapSort
46
-	acumulaHeap+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
85
+	t1 = time.process_time()				#seteamos el tiempo al empezar
86
+	heapSort(lista)							#ejecutamos el algoritmo heapSort
87
+	acumulaHeap+=time.process_time()-t1 	#acumulamos el tiempo de ejecucion
47
 	
88
 	
48
-	t1 = time.clock()				#seteamos el tiempo al empezar
49
-	quickSort(lista)				#ejecutamos el algoritmo quickSort
50
-	acumulaQuick+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
89
+	t1 = time.process_time()						#seteamos el tiempo al empezar
90
+	quickSort(lista)						#ejecutamos el algoritmo quickSort
91
+	acumulaQuick+=time.process_time()-t1 	#acumulamos el tiempo de ejecucion
51
 	
92
 	
52
-	t1 = time.clock()				#seteamos el tiempo al empezar
53
-	shellSort(lista)				#ejecutamos el algoritmo shellSort
54
-	acumulaShell+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
93
+	t1 = time.process_time()				#seteamos el tiempo al empezar
94
+	shellSort(lista)						#ejecutamos el algoritmo shellSort
95
+	acumulaShell+=time.process_time()-t1 	#acumulamos el tiempo de ejecucion
55
 
96
 
56
 #imprimos los resultados
97
 #imprimos los resultados
57
-print "Promedio de tiempo de ejecucion de "+ str(veces) +" listas de largo " + str(largoLista)
58
-print "MergeSort " + str(acumulaMerge/veces) + " segundos"
59
-print "HeapSort " + str(acumulaHeap/veces) + " segundos"
60
-print "QuickSort " + str(acumulaQuick/veces) + " segundos"
61
-print "ShellSort " + str(acumulaShell/veces) + " segundos"
98
+print ("Promedio de tiempo de ejecucion de "+ str(veces) +" listas de largo " + str(largoLista))
99
+print ("MergeSort " + str(acumulaMerge/veces) + " segundos")
100
+print ("HeapSort " + str(acumulaHeap/veces) + " segundos")
101
+print ("QuickSort " + str(acumulaQuick/veces) + " segundos")
102
+print ("ShellSort " + str(acumulaShell/veces) + " segundos")
62
 
103