3 Revize

Autor SHA1 Zpráva Datum
  ryanbarreto1 13ca9b085d Merge branch 'sortingFinal' of https://git.ccom.uprrp.edu/CCOM4030/AlAlRy into sortingFinal před 2 roky
  ryanbarreto1 7c902df6d4 Merge branch 'HeapSort' into sortingFinal před 2 roky
  ryanbarreto1 d3ab427cdd codigo de heapsort anadido před 2 roky
1 změnil soubory, kde provedl 43 přidání a 1 odebrání
  1. 43
    1
      sorting.py

+ 43
- 1
sorting.py Zobrazit soubor

@@ -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
 import utils.qsortUtils as qsortUtils
12
+import math
12 13
 
13 14
 def mergeSort(lista):
14 15
 	#definan el algoritmo de ordenamiento mergesort
@@ -64,8 +65,49 @@ def mergeSort(lista):
64 65
 	return lista
65 66
 	# Code was base and taken from GeeksforGeeks
66 67
 
68
+def MAX_HEAPIFY(lista, index):
69
+	# funcion para mantener la propiedad lista[PARENT(i)] >= lista[i]
70
+	# para todo nodo excepto la raiz en el heap
71
+
72
+	lefti = 2 * index + 1		# index hijo izquierdo
73
+	righti =  2 * index + 2	# index hijo derecho
74
+
75
+	largo = len(lista) - 1
76
+
77
+	# Si el hijo izq es mayor que el padre
78
+	if lefti <= largo and lista[lefti] > lista[index]:
79
+		largest = lefti
80
+		else:
81
+		largest = index
82
+
83
+	 # Si el hijo derecho es mayor que el padre
84
+	if righti <= largo and lista[righti] > lista[largest]:
85
+		largest = righti
86
+
87
+	 # Si el index seleccionado no es el del numero mas grande
88
+	if largest != index:
89
+		# swap de los numeros en los indexes
90
+		lista[index], lista[largest] = lista[largest], lista[index]
91
+		MAX_HEAPIFY(lista, largest)
92
+
93
+def BUILD_MAX_HEAP(lista):
94
+	largo = len(lista) - 1
95
+	index = math.floor(largo/2)
96
+	while index >= 1:
97
+		MAX_HEAPIFY(lista,index)
98
+		index = index - 1
99
+
67 100
 def heapSort(lista):
68 101
 	#definan el algoritmo de ordenamiento heapsort
102
+
103
+	BUILD_MAX_HEAP(lista)
104
+	largo = len(lista)
105
+	while largo >= 2:
106
+		# swap del primer numero y el ultimo
107
+		lista[0], lista[largo-1] = lista[largo-1], lista[0]
108
+		largo = largo - 1
109
+		MAX_HEAPIFY(lista,0)
110
+
69 111
 	return lista
70 112
 
71 113
 def quickSort(lista):
@@ -142,4 +184,4 @@ def main():
142 184
 	print (f"ShellSort {str(acumulaShell/veces) }segundos")
143 185
 
144 186
 if __name__ == "__main__":
145
-	main()
187
+	main()