浏览代码

Arreglos al algoritmo de heapSort

root 2 年前
父节点
当前提交
8c294f3922
共有 1 个文件被更改,包括 18 次插入21 次删除
  1. 18
    21
      sorting.py

+ 18
- 21
sorting.py 查看文件

@@ -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