|
@@ -9,7 +9,6 @@ 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
|
13
|
12
|
|
14
|
13
|
def mergeSort(lista):
|
15
|
14
|
#definan el algoritmo de ordenamiento mergesort
|
|
@@ -65,48 +64,46 @@ def mergeSort(lista):
|
65
|
64
|
return lista
|
66
|
65
|
# Code was base and taken from GeeksforGeeks
|
67
|
66
|
|
68
|
|
-def MAX_HEAPIFY(lista, index):
|
|
67
|
+def MAX_HEAPIFY(lista, index, largo):
|
69
|
68
|
# funcion para mantener la propiedad lista[PARENT(i)] >= lista[i]
|
70
|
69
|
# para todo nodo excepto la raiz en el heap
|
71
|
70
|
|
72
|
|
- lefti = 2 * index + 1 # index hijo izquierdo
|
73
|
|
- righti = 2 * index + 2 # index hijo derecho
|
|
71
|
+ largest = index
|
74
|
72
|
|
75
|
|
- largo = len(lista) - 1
|
|
73
|
+ lefti = 2 * index + 1 # index hijo izquierdo
|
|
74
|
+ righti = 2 * index + 2 # index hijo derecho
|
76
|
75
|
|
77
|
76
|
# Si el hijo izq es mayor que el padre
|
78
|
|
- if lefti <= largo and lista[lefti] > lista[index]:
|
|
77
|
+ if lefti < largo and lista[lefti] > lista[largest]:
|
79
|
78
|
largest = lefti
|
80
|
|
- else:
|
81
|
|
- largest = index
|
82
|
79
|
|
83
|
80
|
# Si el hijo derecho es mayor que el padre
|
84
|
|
- if righti <= largo and lista[righti] > lista[largest]:
|
|
81
|
+ if righti < largo and lista[righti] > lista[largest]:
|
85
|
82
|
largest = righti
|
86
|
83
|
|
87
|
84
|
# Si el index seleccionado no es el del numero mas grande
|
88
|
85
|
if largest != index:
|
89
|
86
|
# swap de los numeros en los indexes
|
90
|
87
|
lista[index], lista[largest] = lista[largest], lista[index]
|
91
|
|
- MAX_HEAPIFY(lista, largest)
|
|
88
|
+ MAX_HEAPIFY(lista, largest, largo)
|
92
|
89
|
|
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
|
|
90
|
+def BUILD_MAX_HEAP(lista, largo):
|
|
91
|
+ index = largo//2 - 1
|
|
92
|
+ while index > -1:
|
|
93
|
+ MAX_HEAPIFY(lista,index,largo)
|
|
94
|
+ index -= 1
|
99
|
95
|
|
100
|
96
|
def heapSort(lista):
|
101
|
97
|
#definan el algoritmo de ordenamiento heapsort
|
102
|
|
-
|
103
|
|
- BUILD_MAX_HEAP(lista)
|
104
|
98
|
largo = len(lista)
|
105
|
|
- while largo >= 2:
|
|
99
|
+
|
|
100
|
+ BUILD_MAX_HEAP(lista, largo)
|
|
101
|
+
|
|
102
|
+ while largo > 0:
|
106
|
103
|
# swap del primer numero y el ultimo
|
107
|
104
|
lista[0], lista[largo-1] = lista[largo-1], lista[0]
|
108
|
|
- largo = largo - 1
|
109
|
|
- MAX_HEAPIFY(lista,0)
|
|
105
|
+ largo -= 1
|
|
106
|
+ MAX_HEAPIFY(lista,0,largo)
|
110
|
107
|
|
111
|
108
|
return lista
|
112
|
109
|
|