3 Commits

Author SHA1 Message Date
  Jantony Velazquez Gauthier 553e46616e Merge remote-tracking branch 'origin/Dylan-HeapSort' into sortingFinal 1 year ago
  dylan.cedres a5ad9b9a1d Adding heapsort implementation 1 year ago
  dylan.cedres d9ec496f93 Adding HeapSort implementation 1 year ago
1 changed files with 31 additions and 2 deletions
  1. 31
    2
      sorting.py

+ 31
- 2
sorting.py View File

@@ -10,6 +10,7 @@ from random import randint
10 10
 import time
11 11
 from copy import deepcopy
12 12
 import sys
13
+from heapq import heapify, heappush
13 14
 
14 15
 # This function was created to prevent program from stopping before recursion finished
15 16
 # Changes python's recursion limit
@@ -44,9 +45,38 @@ def mergeSort(lista): # Ángel G. Romero Rosario on 10082022
44 45
 		mid = len(lista) // 2 						# Find the middle in lista and call function to merge lista
45 46
 		return merge(mergeSort(lista[:mid]), mergeSort(lista[mid:]))
46 47
 
47
-
48 48
 def heapSort(lista):
49 49
 	#definan el algoritmo de ordenamiento heapsort
50
+	# Dylan A. Cedres Rivera
51
+
52
+	# Nuevo heap para insertar los elementos de lista creada con numeros aleatorios
53
+	myHeap = []
54
+	heapify(myHeap)
55
+
56
+	# Se copian los elementos de lista al heap y se ordenan de menor a mayor los elementos con cada push.
57
+	# Todos los elementos se les asigna un signo contrario al que tienen, para poder crear un MaxHeap, de manera
58
+	# 	que los numeros mas grandes se convierten en los mas pequenos.
59
+	# Si se quiere hacer un MinHeap, la instruccion de multiplicar por -1 no es neceseria 
60
+	for element in lista:
61
+		heappush(myHeap, -1 * element)
62
+
63
+	# print("lista antes de 'heapificar'", lista)
64
+
65
+
66
+	# Este loop se utiliza para crear un MaxHeap, de manera que le devuelve el signo original que tenian los 
67
+	#	elementos antes de que se anadieran al heap.
68
+	# Esto significa que los elementos mas pequenos, se convierten en los mas grandes, dejando la forma de un MaxHeap,
69
+	#	con el numero mas grande quedando como el nodo padre del arbol binario.
70
+	# Si se quiere hacer un MinHeap, este loop no se necesita. 
71
+	for i in range(len(myHeap)):
72
+		myHeap[i] = myHeap[i] * -1
73
+
74
+	# print("lista 'heapificada'", myHeap)
75
+	
76
+	# Copia los elementos del heap ordenado de vuelta a la lista inicialmente generada y la devuelve
77
+	lista = myHeap
78
+	return lista
79
+
50 80
 	return lista
51 81
 
52 82
 def quickSort(lista):
@@ -54,7 +84,6 @@ def quickSort(lista):
54 84
 	if(len(lista) != 0):
55 85
     		if(len(lista) == 1):
56 86
       			return lista
57
-
58 87
     		else:
59 88
       			p = lista[0]
60 89