Explorar el Código

Added heapSort code and heap.py

luislopez66 hace 2 años
commit
a2416a1f15
Se han modificado 2 ficheros con 121 adiciones y 0 borrados
  1. 37
    0
      heap.py
  2. 84
    0
      sorting.py

+ 37
- 0
heap.py Ver fichero

@@ -0,0 +1,37 @@
1
+''' Luis Andrés López Mañán
2
+    Program written by hand as a draft on 09/19/2022
3
+    Credit goes to GeeksForGeeks
4
+    Link: https://www.geeksforgeeks.org/python-program-for-heap-sort/
5
+    Last access on 09/19/2022
6
+    Program wrriten and edited on 10/10/2022
7
+'''
8
+
9
+# This function heapifies a subtree rooted at an index
10
+# i. Also, n is the size of a heap and arr is array.
11
+
12
+def heapify(lista, n, i):
13
+		# largest is root for now
14
+		largest = i
15
+
16
+		# left child of root
17
+		left = 2 * i + 1
18
+
19
+		# right child of root
20
+		right = 2 * i + 2
21
+
22
+		# Checks if root has a left child and is greater
23
+		# than root
24
+		if l < n and lista[i] < lista[l] :
25
+			largest = l
26
+
27
+		# Checks if root has a right child and is greater
28
+		# than root
29
+		if r < n and lista[largest] < lista[r]:
30
+			largest = r
31
+
32
+		# If necessary, this changes root by swapping va-
33
+		# lues
34
+		lista[i], lista[largest] = lista[largest], lista[i]
35
+
36
+		# This heapifies the root repeatedly
37
+		heapify(lista, n, largest)

+ 84
- 0
sorting.py Ver fichero

@@ -0,0 +1,84 @@
1
+"""
2
+Carlos J Corrada Bravo
3
+Este programa calcula el promedio de tiempo de ejecucion de cuatro algoritmos de ordenamiento
4
+La variable maxValor define el valor maximo de los elementos de la lista
5
+La variable largoLista define el largo de las listas a ordenar
6
+La variable veces define las veces que se va a hacer el ordenamiento
7
+Al final se imprimen los promedios de cada algortimo
8
+"""
9
+from random import randint
10
+import time
11
+from heap import heap
12
+
13
+# Python program for implementation of MergeSort
14
+
15
+# Merges two subarrays of arr[].
16
+# First subarray is arr[l..m]
17
+# Second subarray is arr[m+1..r]
18
+
19
+def mergeSort(lista):
20
+	# definan el algoritmo de ordenamiento mergesort
21
+	return lista
22
+
23
+def heapSort(lista):
24
+	
25
+	n = len(lista)
26
+	h1 = (n // 2) - 1
27
+	for i in range(h1, -1, -1):
28
+		heapify(lista, n, i)
29
+
30
+	for i in range(h1, -1, -1):
31
+		lista[i], lista[0] = lista[0], lista[i]
32
+		heapify(lista, i, 0)
33
+
34
+	return lista
35
+
36
+def quickSort(lista):
37
+	#definan el algoritmo de ordenamiento quicksort
38
+	return lista
39
+
40
+def shellSort(lista):
41
+	#definan el algoritmo de ordenamiento shellsort
42
+	return lista
43
+
44
+maxValor=1000 	#define el valor maximo de los elementos de la lista
45
+largoLista=1000 	#define el largo de las listas a ordenar
46
+veces=100    		#define las veces que se va a hacer el ordenamiento
47
+
48
+acumulaMerge=0 	#variable para acumular el tiempo de ejecucion del mergesort
49
+acumulaHeap=0 	#variable para acumular el tiempo de ejecucion del heapsort
50
+acumulaQuick=0 	#variable para acumular el tiempo de ejecucion del quicksort
51
+acumulaShell=0 	#variable para acumular el tiempo de ejecucion del shellsort
52
+
53
+for i in range(veces):
54
+	mergelista = [randint(0,maxValor) for r in range(largoLista)] #creamos una lista con valores al azar
55
+	heaplista=list(mergelista)
56
+	quicklista=list(mergelista)
57
+	searchlista=list(mergelista)
58
+
59
+	t1 = time.process_time()					#tomamos el tiempo inicial
60
+	mergeSort(mergelista,0,len(mergelista)-1) 	#ejecutamos el algoritmo mergeSort
61
+	acumulaMerge+=time.process_time() - t1		#acumulamos el tiempo de ejecucion
62
+	print(mergelista)							#desplegamos la lista
63
+
64
+	t1 = time.process_time()				#tomamos el tiempo inicial
65
+	heapSort(heaplista)					    #ejecutamos el algoritmo heapSort
66
+	acumulaHeap+=time.process_time() - t1 	#acumulamos el tiempo de ejecucion
67
+	print(heaplista)						#desplegamos la lista
68
+
69
+	t1 = time.process_time()				#tomamos el tiempo inicial
70
+	quickSort(quicklista)					#ejecutamos el algoritmo quickSort
71
+	acumulaQuick+=time.process_time() - t1	#acumulamos el tiempo de ejecucion
72
+	print(quicklista)						#desplegamos la lista
73
+
74
+	t1 = time.process_time()				#tomamos el tiempo inicial
75
+	shellSort(searchlista)					#ejecutamos el algoritmo shellSort
76
+	acumulaShell+=time.process_time() - t1	#acumulamos el tiempo de ejecucion
77
+	print(searchlista)						#desplegamos la lista
78
+
79
+#imprimos los resultados
80
+print ("Promedio de tiempo de ejecucion de "+ str(veces) +" listas de largo " + str(largoLista))
81
+print ("MergeSort " + str(acumulaMerge/veces) + " segundos")
82
+print ("HeapSort " + str(acumulaHeap/veces) + " segundos")
83
+print ("QuickSort " + str(acumulaQuick/veces) + " segundos")
84
+print ("ShellSort " + str(acumulaShell/veces) + " segundos")