Browse Source

sortingFinal

alejandro.alvarez5 2 years ago
parent
commit
ae9a1771cc
1 changed files with 67 additions and 7 deletions
  1. 67
    7
      sorting.py

+ 67
- 7
sorting.py View File

@@ -1,20 +1,80 @@
1 1
 """
2
-Carlos J Corrada Bravo
2
+iiiiCarlos J Corrada Bravo
3 3
 Este programa calcula el promedio de tiempo de ejecución de cuatro algoritmos de ordenamiento
4 4
 La variable maxValor define el valor maximo de los elementos de la lista
5 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 7
 Al final se imprimen los promedios de cada algortimo
8 8
 """
9 9
 from random import randint
10 10
 import time
11 11
 
12 12
 def mergeSort(lista):
13
+        #Camila Vazquez Rodriguez 
13 14
 	#definan el algoritmo de ordenamiento mergesort
14
-	return lista
15
+        if len(lista) > 1:
16
+                mid = len(lista)//2
17
+                L = lista[:mid]
18
+                R = lista[mid:]
19
+
20
+                mergeSort(L)
21
+                mergeSort(R)
22
+
23
+                i = 0
24
+                j = 0
25
+                k = 0
26
+
27
+        while i < len(L) and j < len(R):
28
+                if L[i] <= R[j]:
29
+                        lista[k] = L[i]
30
+                        i += 1
31
+                else:
32
+                        lista[k] = R[j]
33
+                        j += 1
34
+                k += 1
35
+ 
36
+        while i < len(L):
37
+                lista[k] = L[i]
38
+                i += 1
39
+                k += 1
40
+ 
41
+        while j < len(R):
42
+                lista[k] = R[j]
43
+                j += 1
44
+                k += 1
45
+                
46
+        return lista
15 47
 
16 48
 def heapSort(lista):
17 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)
18 78
 	return lista
19 79
 
20 80
 def quickSort(lista):
@@ -50,7 +110,7 @@ def shellSort(lista):
50 110
 
51 111
 maxValor=1000 	#define el valor maximo de los elementos de la lista
52 112
 largoLista=1000 #define el largo de las listas a ordenar
53
-veces=100 		#define las veces que se va a hacer el ordenamiento 
113
+veces=100 		#define las veces que se va a hacer el ordenamiento
54 114
 
55 115
 acumulaMerge=0 	#variable para acumular el tiempo de ejecucion del mergesort
56 116
 acumulaHeap=0 	#variable para acumular el tiempo de ejecucion del heapsort
@@ -63,15 +123,15 @@ for i in range(veces):
63 123
 	t1 = time.clock() 				#seteamos el tiempo al empezar
64 124
 	mergeSort(lista) 				#ejecutamos el algoritmo mergeSort
65 125
 	acumulaMerge+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
66
-	
126
+
67 127
 	t1 = time.clock()				#seteamos el tiempo al empezar
68 128
 	heapSort(lista)					#ejecutamos el algoritmo heapSort
69 129
 	acumulaHeap+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
70
-	
130
+
71 131
 	t1 = time.clock()				#seteamos el tiempo al empezar
72 132
 	quickSort(lista)				#ejecutamos el algoritmo quickSort
73 133
 	acumulaQuick+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
74
-	
134
+
75 135
 	t1 = time.clock()				#seteamos el tiempo al empezar
76 136
 	shellSort(lista)				#ejecutamos el algoritmo shellSort
77 137
 	acumulaShell+=time.clock()-t1 	#acumulamos el tiempo de ejecucion