2 Commits

Author SHA1 Message Date
  Carlos Hernandez bf89c792e3 Merge branch 'sortingCarlos' into sortingFinal 2 years ago
  Carlos Hernandez 31b5bc542f Añadir implementación de heapSort 2 years ago
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
47
 
47
 
48
 def heapSort(lista):
48
 def heapSort(lista):
49
 	#definan el algoritmo de ordenamiento heapsort
49
 	#definan el algoritmo de ordenamiento heapsort
50
+	"""
51
+	Carlos Hernández
52
+	Implementación de heapSort.
53
+	"""
54
+	def max_heapify(lista, idx, heap_size):
55
+		"""Convertir el nodo `idx` y sus descendientes en un max heap."""
56
+		left_idx = 2 * idx + 1
57
+		right_idx = 2 * idx + 2
58
+		largestval_idx = idx
59
+		if left_idx < heap_size and lista[idx] < lista[left_idx]:
60
+			largestval_idx = left_idx
61
+		if right_idx < heap_size and lista[largestval_idx] < lista[right_idx]:
62
+			largestval_idx = right_idx
63
+		if largestval_idx != idx:
64
+			lista[idx], lista[largestval_idx] = lista[largestval_idx], lista[idx]
65
+			max_heapify(lista, largestval_idx, heap_size)
66
+
67
+	def build_max_heap(lista, heap_size):
68
+		"""Construir un max heap the un heap dado."""
69
+		for idx in range((heap_size - 1) // 2, -1, -1):
70
+			max_heapify(lista, idx, heap_size)
71
+
72
+	heap_size = len(lista)
73
+	build_max_heap(lista, heap_size)
74
+	for idx in range(len(lista) - 1, 0, -1):
75
+		lista[0], lista[idx] = lista[idx], lista[0]
76
+		heap_size -= 1
77
+		max_heapify(lista, 0, heap_size)
50
 	return lista
78
 	return lista
51
 
79
 
52
 def quickSort(lista):
80
 def quickSort(lista):
59
 
87
 
60
 maxValor=1000 	#define el valor maximo de los elementos de la lista
88
 maxValor=1000 	#define el valor maximo de los elementos de la lista
61
 largoLista=1000 #define el largo de las listas a ordenar
89
 largoLista=1000 #define el largo de las listas a ordenar
62
-veces=100 		#define las veces que se va a hacer el ordenamiento 
90
+veces=100 		#define las veces que se va a hacer el ordenamiento
63
 
91
 
64
 acumulaMerge=0 	#variable para acumular el tiempo de ejecucion del mergesort
92
 acumulaMerge=0 	#variable para acumular el tiempo de ejecucion del mergesort
65
 acumulaHeap=0 	#variable para acumular el tiempo de ejecucion del heapsort
93
 acumulaHeap=0 	#variable para acumular el tiempo de ejecucion del heapsort
72
 	t1 = time.clock() 				#seteamos el tiempo al empezar
100
 	t1 = time.clock() 				#seteamos el tiempo al empezar
73
 	mergeSort(lista) 				#ejecutamos el algoritmo mergeSort
101
 	mergeSort(lista) 				#ejecutamos el algoritmo mergeSort
74
 	acumulaMerge+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
102
 	acumulaMerge+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
75
-	
103
+
76
 	t1 = time.clock()				#seteamos el tiempo al empezar
104
 	t1 = time.clock()				#seteamos el tiempo al empezar
77
 	heapSort(lista)					#ejecutamos el algoritmo heapSort
105
 	heapSort(lista)					#ejecutamos el algoritmo heapSort
78
 	acumulaHeap+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
106
 	acumulaHeap+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
79
-	
107
+
80
 	t1 = time.clock()				#seteamos el tiempo al empezar
108
 	t1 = time.clock()				#seteamos el tiempo al empezar
81
 	quickSort(lista)				#ejecutamos el algoritmo quickSort
109
 	quickSort(lista)				#ejecutamos el algoritmo quickSort
82
 	acumulaQuick+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
110
 	acumulaQuick+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
83
-	
111
+
84
 	t1 = time.clock()				#seteamos el tiempo al empezar
112
 	t1 = time.clock()				#seteamos el tiempo al empezar
85
 	shellSort(lista)				#ejecutamos el algoritmo shellSort
113
 	shellSort(lista)				#ejecutamos el algoritmo shellSort
86
 	acumulaShell+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
114
 	acumulaShell+=time.clock()-t1 	#acumulamos el tiempo de ejecucion