4 Коміти

Автор SHA1 Повідомлення Дата
  andrelfuentes 450570ea85 fixed 1 рік тому
  andrelfuentes 66dd09a9f7 Merge remote-tracking branch 'remotes/origin/sortingFinal' into sortingAndrel 1 рік тому
  andrelfuentes 2b5fcd8a65 sorting implementado 1 рік тому
  andrelfuentes 2cc644f179 Modificaciones en nuevo branch 1 рік тому
2 змінених файлів з 58 додано та 68 видалено
  1. 2
    1
      README.md
  2. 56
    67
      sorting.py

+ 2
- 1
README.md Переглянути файл

@@ -1 +1,2 @@
1
-Este es el README del grupo 4. Conisiste de Andrel, Edward, Michael y Jasiel.
1
+Este es el README del grupo 4. Este conisiste de Andrel, Edward, Michael y Jasiel.
2
+Este README es dentro del nuevo branch "sortingAndrel".

+ 56
- 67
sorting.py Переглянути файл

@@ -6,66 +6,27 @@ La variable largoLista define el largo de las listas a ordenar
6 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 10
 from random import randint
10 11
 import time
11 12
 
12 13
 def mergeSort(lista):
13
-    #definan el algoritmo de ordenamiento mergesort
14
-    # se vieron videos y se leyo sobre el algoritmo en GeekforGeeks, educative.io y medium.com el codigo fue basado en esto
15
-
16
-    # si tiene al menos un elemento
17
-    if len(lista) > 1:
18
-        # buscar mitad de lista
19
-        middle = len(lista)//2
20
-        # llamada recursiva de mitad izq de lista
21
-        Left = mergeSort(lista[:middle])
22
-        # llamada recursiva de mitad derecha de lista
23
-        Right = mergeSort(lista[middle:])
24
-
25
-        # return y llamada recursiva merge para combinar ambas listas
26
-        return merge(Right, Left, lista)
27
-
28
-    # se devuelve cuando solamente haya un elemento
29
-    return lista
30
-
31
-def merge(Right, Left, lista):
32
-    # acumuladores 
33
-    i = 0
34
-    j = 0
35
-    k = 0
36
-
37
-    # comparar las dos listas y ordenar de manera ascendiente 
38
-    while i < len(Left) and j < len(Right):
39
-        # si el elemento de la izq es menor que la derecha
40
-        # añadelo a la lista
41
-        if Left[i] < Right[j]:
42
-            lista[k] = Left[i]
43
-            i += 1
44
-            k += 1
45
-        # si el elemento de la derecha es menor que la derecha
46
-        # añadelo a la lista
47
-        else:
48
-            lista[k] = Right[j]
49
-            j += 1
50
-            k += 1
51
-
52
-    # si quedan elementos en la lista izq añadelos en la lista
53
-    while i < len(Left):
54
-        lista[k] = Left[i]
55
-        i += 1
56
-        k += 1
57
-
58
-    # si quedan elementos en la lista derecha añadelos en la lista
59
-    while j < len(Right):
60
-        lista[k] = Right[j]
61
-        j += 1
62
-        k += 1
63
-    
64 14
     return lista
65 15
 
66 16
 	
67 17
 def heapSort(lista):
18
+	#trabajado por Andrel Fuentes
68 19
 	#definan el algoritmo de ordenamiento heapsort
20
+
21
+	#crear el "max heap"
22
+	for i in range(largoLista // 2, -1, -1):
23
+		heapify(lista, largoLista, i)
24
+
25
+	for i in range(largoLista - 1, 0, -1):
26
+		lista[i], lista[0] = lista[0], lista[i]
27
+
28
+		heapify(lista, i, 0)
29
+
69 30
 	return lista
70 31
 
71 32
 def quickSort(lista):
@@ -76,6 +37,34 @@ def shellSort(lista):
76 37
 	#definan el algoritmo de ordenamiento shellsort
77 38
 	return lista
78 39
 
40
+#######################################################################################
41
+
42
+def heapify(lista, largo, raiz):
43
+	#trabajado por Andrel Fuentes
44
+	#encontrar cual el valor mayor entre de los hijos y raiz
45
+	#define las posiciones de los hijos
46
+	largest_value = raiz
47
+	left_child = raiz * 2 + 1
48
+	right_child = raiz * 2 + 2
49
+
50
+	#se verifica si el hijo izquierdo es mayor, actualizar variable de mayor
51
+	#si fuera necesario
52
+	if left_child < largoLista and lista[left_child] > lista[raiz]:
53
+		largest_value = left_child
54
+
55
+	#se verifica si el hijo derecho es mayor, actualizar variable de mayor
56
+	#si fuera necesario
57
+	if right_child < largoLista and lista[right_child] > lista[largest_value]:
58
+		largest_value = right_child
59
+
60
+	#se verifica si la posicion inicial sigue siendo la misma/mayor, swap si necesario
61
+	#y continuar con heapify
62
+	if largest_value != raiz:
63
+		lista[raiz], lista[largest_value] = lista[largest_value], lista[raiz]
64
+		heapify(lista, largo, largest_value)
65
+
66
+#######################################################################################
67
+
79 68
 maxValor=1000 	#define el valor maximo de los elementos de la lista
80 69
 largoLista=1000 #define el largo de las listas a ordenar
81 70
 veces=100 		#define las veces que se va a hacer el ordenamiento 
@@ -91,26 +80,26 @@ for i in range(veces):
91 80
 	quicklista=list(mergelista)
92 81
 	searchlista=list(mergelista)
93 82
 
94
-	t1 = time.clock() 				#seteamos el tiempo al empezar
83
+	t1 = time.process_time() 				#seteamos el tiempo al empezar
95 84
 	mergeSort(mergelista) 				#ejecutamos el algoritmo mergeSort
96
-	acumulaMerge+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
97
-	
98
-	t1 = time.clock()				#seteamos el tiempo al empezar
85
+	acumulaMerge+=time.process_time()-t1 	#acumulamos el tiempo de ejecucion
86
+
87
+	t1 = time.process_time() 				#seteamos el tiempo al empezar
99 88
 	heapSort(heaplista)					#ejecutamos el algoritmo heapSort
100
-	acumulaHeap+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
101
-	
102
-	t1 = time.clock()				#seteamos el tiempo al empezar
89
+	acumulaHeap+=time.process_time()-t1 	#acumulamos el tiempo de ejecucion
90
+
91
+	t1 = time.process_time() 				#seteamos el tiempo al empezar
103 92
 	quickSort(quicklista)				#ejecutamos el algoritmo quickSort
104
-	acumulaQuick+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
105
-	
106
-	t1 = time.clock()				#seteamos el tiempo al empezar
93
+	acumulaQuick+=time.process_time()-t1 	#acumulamos el tiempo de ejecucion
94
+
95
+	t1 = time.process_time()				#seteamos el tiempo al empezar
107 96
 	shellSort(searchlista)				#ejecutamos el algoritmo shellSort
108
-	acumulaShell+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
97
+	acumulaShell+=time.process_time()-t1 	#acumulamos el tiempo de ejecucion
109 98
 
110 99
 #imprimos los resultados
111
-print "Promedio de tiempo de ejecucion de "+ str(veces) +" listas de largo " + str(largoLista)
112
-print "MergeSort " + str(acumulaMerge/veces) + " segundos"
113
-print "HeapSort " + str(acumulaHeap/veces) + " segundos"
114
-print "QuickSort " + str(acumulaQuick/veces) + " segundos"
115
-print "ShellSort " + str(acumulaShell/veces) + " segundos"
100
+print ("Promedio de tiempo de ejecucion de "+ str(veces) +" listas de largo " + str(largoLista))
101
+print ("MergeSort " + str(acumulaMerge/veces) + " segundos")
102
+print ("HeapSort " + str(acumulaHeap/veces) + " segundos")
103
+print ("QuickSort " + str(acumulaQuick/veces) + " segundos")
104
+print ("ShellSort " + str(acumulaShell/veces) + " segundos")
116 105