Kaynağa Gözat

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 yıl önce
ebeveyn
işleme
ea619bf96b
1 değiştirilmiş dosya ile 58 ekleme ve 17 silme
  1. 58
    17
      sorting.py

+ 58
- 17
sorting.py Dosyayı Görüntüle

@@ -13,18 +13,59 @@ def mergeSort(lista):
13 13
 	#definan el algoritmo de ordenamiento mergesort
14 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 43
 def heapSort(lista):
17 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 56
 	return lista
19 57
 
58
+
20 59
 def quickSort(lista):
21 60
 	#definan el algoritmo de ordenamiento quicksort
22 61
 	return lista
23 62
 
63
+
24 64
 def shellSort(lista):
25 65
 	#definan el algoritmo de ordenamiento shellsort
26 66
 	return lista
27 67
 
68
+
28 69
 maxValor=1000 	#define el valor maximo de los elementos de la lista
29 70
 largoLista=1000 #define el largo de las listas a ordenar
30 71
 veces=100 		#define las veces que se va a hacer el ordenamiento 
@@ -37,26 +78,26 @@ acumulaShell=0 	#variable para acumular el tiempo de ejecucion del shellsort
37 78
 for i in range(veces):
38 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 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