3 Комити

Аутор SHA1 Порука Датум
  ryanbarreto1 13ca9b085d Merge branch 'sortingFinal' of https://git.ccom.uprrp.edu/CCOM4030/AlAlRy into sortingFinal пре 2 година
  ryanbarreto1 7c902df6d4 Merge branch 'HeapSort' into sortingFinal пре 2 година
  ryanbarreto1 d3ab427cdd codigo de heapsort anadido пре 2 година
1 измењених фајлова са 43 додато и 1 уклоњено
  1. 43
    1
      sorting.py

+ 43
- 1
sorting.py Прегледај датотеку

9
 from random import randint
9
 from random import randint
10
 import time
10
 import time
11
 import utils.qsortUtils as qsortUtils
11
 import utils.qsortUtils as qsortUtils
12
+import math
12
 
13
 
13
 def mergeSort(lista):
14
 def mergeSort(lista):
14
 	#definan el algoritmo de ordenamiento mergesort
15
 	#definan el algoritmo de ordenamiento mergesort
64
 	return lista
65
 	return lista
65
 	# Code was base and taken from GeeksforGeeks
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
 def heapSort(lista):
100
 def heapSort(lista):
68
 	#definan el algoritmo de ordenamiento heapsort
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
 	return lista
111
 	return lista
70
 
112
 
71
 def quickSort(lista):
113
 def quickSort(lista):
142
 	print (f"ShellSort {str(acumulaShell/veces) }segundos")
184
 	print (f"ShellSort {str(acumulaShell/veces) }segundos")
143
 
185
 
144
 if __name__ == "__main__":
186
 if __name__ == "__main__":
145
-	main()
187
+	main()