Browse Source

Comments

Added comments to Heap Sort Implementation
PabloPuig1 2 years ago
parent
commit
eb05d59c6e
1 changed files with 12 additions and 5 deletions
  1. 12
    5
      sorting.py

+ 12
- 5
sorting.py View File

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