Browse Source

Añadir implementación de heapSort

Carlos Hernandez 2 years ago
parent
commit
c91c3e4e87
1 changed files with 33 additions and 5 deletions
  1. 33
    5
      sorting.py

+ 33
- 5
sorting.py View File

3
 Este programa calcula el promedio de tiempo de ejecución de cuatro algoritmos de ordenamiento
3
 Este programa calcula el promedio de tiempo de ejecución de cuatro algoritmos de ordenamiento
4
 La variable maxValor define el valor maximo de los elementos de la lista
4
 La variable maxValor define el valor maximo de los elementos de la lista
5
 La variable largoLista define el largo de las listas a ordenar
5
 La variable largoLista define el largo de las listas a ordenar
6
-La variable veces define las veces que se va a hacer el ordenamiento 
6
+La variable veces define las veces que se va a hacer el ordenamiento
7
 Al final se imprimen los promedios de cada algortimo
7
 Al final se imprimen los promedios de cada algortimo
8
 """
8
 """
9
 from random import randint
9
 from random import randint
15
 
15
 
16
 def heapSort(lista):
16
 def heapSort(lista):
17
 	#definan el algoritmo de ordenamiento heapsort
17
 	#definan el algoritmo de ordenamiento heapsort
18
+	"""
19
+	Carlos Hernández
20
+	Implementación de heapSort.
21
+	"""
22
+	def max_heapify(lista, idx: int, heap_size: int):
23
+		"""Convertir el nodo `idx` y sus descendientes en un max heap."""
24
+		left_idx: int = 2 * idx + 1
25
+		right_idx: int = 2 * idx + 2
26
+		largestval_idx: int = idx
27
+		if left_idx < heap_size and lista[idx] < lista[left_idx]:
28
+			largestval_idx = left_idx
29
+		if right_idx < heap_size and lista[largestval_idx] < lista[right_idx]:
30
+			largestval_idx = right_idx
31
+		if largestval_idx != idx:
32
+			lista[idx], lista[largestval_idx] = lista[largestval_idx], lista[idx]
33
+			max_heapify(lista, largestval_idx, heap_size)
34
+
35
+	def build_max_heap(lista, heap_size: int):
36
+		"""Construir un max heap the un heap dado."""
37
+		for idx in range((heap_size - 1) // 2, -1, -1):
38
+			max_heapify(lista, idx, heap_size)
39
+
40
+	heap_size: int = len(lista)
41
+	build_max_heap(lista, heap_size)
42
+	for idx in range(len(lista) - 1, 0, -1):
43
+		lista[0], lista[idx] = lista[idx], lista[0]
44
+		heap_size -= 1
45
+		max_heapify(lista, 0, heap_size)
18
 	return lista
46
 	return lista
19
 
47
 
20
 def quickSort(lista):
48
 def quickSort(lista):
27
 
55
 
28
 maxValor=1000 	#define el valor maximo de los elementos de la lista
56
 maxValor=1000 	#define el valor maximo de los elementos de la lista
29
 largoLista=1000 #define el largo de las listas a ordenar
57
 largoLista=1000 #define el largo de las listas a ordenar
30
-veces=100 		#define las veces que se va a hacer el ordenamiento 
58
+veces=100 		#define las veces que se va a hacer el ordenamiento
31
 
59
 
32
 acumulaMerge=0 	#variable para acumular el tiempo de ejecucion del mergesort
60
 acumulaMerge=0 	#variable para acumular el tiempo de ejecucion del mergesort
33
 acumulaHeap=0 	#variable para acumular el tiempo de ejecucion del heapsort
61
 acumulaHeap=0 	#variable para acumular el tiempo de ejecucion del heapsort
40
 	t1 = time.clock() 				#seteamos el tiempo al empezar
68
 	t1 = time.clock() 				#seteamos el tiempo al empezar
41
 	mergeSort(lista) 				#ejecutamos el algoritmo mergeSort
69
 	mergeSort(lista) 				#ejecutamos el algoritmo mergeSort
42
 	acumulaMerge+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
70
 	acumulaMerge+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
43
-	
71
+
44
 	t1 = time.clock()				#seteamos el tiempo al empezar
72
 	t1 = time.clock()				#seteamos el tiempo al empezar
45
 	heapSort(lista)					#ejecutamos el algoritmo heapSort
73
 	heapSort(lista)					#ejecutamos el algoritmo heapSort
46
 	acumulaHeap+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
74
 	acumulaHeap+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
47
-	
75
+
48
 	t1 = time.clock()				#seteamos el tiempo al empezar
76
 	t1 = time.clock()				#seteamos el tiempo al empezar
49
 	quickSort(lista)				#ejecutamos el algoritmo quickSort
77
 	quickSort(lista)				#ejecutamos el algoritmo quickSort
50
 	acumulaQuick+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
78
 	acumulaQuick+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
51
-	
79
+
52
 	t1 = time.clock()				#seteamos el tiempo al empezar
80
 	t1 = time.clock()				#seteamos el tiempo al empezar
53
 	shellSort(lista)				#ejecutamos el algoritmo shellSort
81
 	shellSort(lista)				#ejecutamos el algoritmo shellSort
54
 	acumulaShell+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
82
 	acumulaShell+=time.clock()-t1 	#acumulamos el tiempo de ejecucion