|
@@ -14,11 +14,15 @@ def mergeSort(lista):
|
14
|
14
|
#definan el algoritmo de ordenamiento mergesort
|
15
|
15
|
return lista
|
16
|
16
|
|
|
17
|
+#Esta es la implementación de Heap sort de Geeksforgeeks
|
|
18
|
+#https://www.geeksforgeeks.org/heap-sort/
|
17
|
19
|
def heapSort(lista):
|
18
|
20
|
#definan el algoritmo de ordenamiento heapsort
|
19
|
21
|
n = len(lista)
|
|
22
|
+ #Se hace el maxheap
|
20
|
23
|
for i in range(n // 2 - 1, -1, -1):
|
21
|
24
|
heapify(lista, n, i)
|
|
25
|
+ #Se extraen elementos uno a uno
|
22
|
26
|
for i in range(n - 1, 0, -1):
|
23
|
27
|
(lista[i], lista[0]) = (lista[0], lista[i])
|
24
|
28
|
heapify(lista, i, 0)
|
|
@@ -33,16 +37,19 @@ def shellSort(lista):
|
33
|
37
|
return lista
|
34
|
38
|
|
35
|
39
|
def heapify(lista, n, i):
|
36
|
|
- largest = i
|
37
|
|
- l = 2 * i * 1
|
38
|
|
- r = 2 * i + 2
|
39
|
|
-
|
|
40
|
+ largest = i #largest = raíz
|
|
41
|
+ l = 2 * i * 1 #left
|
|
42
|
+ r = 2 * i + 2 #right
|
|
43
|
+ #Ver is existe una rama isquierda y si es mayor a la raíz
|
40
|
44
|
if l < n and lista[i] < lista[l]:
|
41
|
45
|
largest = l
|
|
46
|
+ #Ver is existe una rama derecha y si es mayor a la raíz
|
42
|
47
|
if r < n and lista[largest] < lista[r]:
|
43
|
48
|
largest = r
|
|
49
|
+ #Se cambia la raíz si fuese necesario
|
44
|
50
|
if largest != i:
|
45
|
|
- (lista[i], lista[largest]) = (lista[largest], lista[i])
|
|
51
|
+ (lista[i], lista[largest]) = (lista[largest], lista[i]) #swap
|
|
52
|
+ #Se llama heapify en la raíz nueva
|
46
|
53
|
heapify(lista, n, largest)
|
47
|
54
|
|
48
|
55
|
maxValor=1000 #define el valor maximo de los elementos de la lista
|