Browse Source

added michael sorting

Michael Terrefortes Rosado 2 years ago
parent
commit
06d0c4eeae
1 changed files with 52 additions and 4 deletions
  1. 52
    4
      sorting.py

+ 52
- 4
sorting.py View File

11
 import time
11
 import time
12
 
12
 
13
 def mergeSort(lista):
13
 def mergeSort(lista):
14
+    #definan el algoritmo de ordenamiento mergesort
15
+    # se vieron videos y se leyo sobre el algoritmo en GeekforGeeks, educative.io y medium.com el codigo fue basado en esto
16
+
17
+
18
+    # si tiene al menos un elemento
19
+    if len(lista) > 1:
20
+        # buscar mitad de lista
21
+        middle = len(lista)//2
22
+        # llamada recursiva de mitad izq de lista
23
+        Left = mergeSort(lista[:middle])
24
+        # llamada recursiva de mitad derecha de lista
25
+        Right = mergeSort(lista[middle:])
26
+
27
+        # return y llamada recursiva merge para combinar ambas listas
28
+        return merge(Right, Left, lista)
29
+
30
+    # se devuelve cuando solamente haya un elemento
31
+    return lista
32
+
33
+def merge(Right, Left, lista):
34
+    # acumuladores 
35
+    i = 0
36
+    j = 0
37
+    k = 0
38
+
39
+    # comparar las dos listas y ordenar de manera ascendiente 
40
+    while i < len(Left) and j < len(Right):
41
+        # si el elemento de la izq es menor que la derecha
42
+        # añadelo a la lista
43
+        if Left[i] < Right[j]:
44
+            lista[k] = Left[i]
45
+            i += 1
46
+            k += 1
47
+        # si el elemento de la derecha es menor que la derecha
48
+        # añadelo a la lista
49
+        else:
50
+            lista[k] = Right[j]
51
+            j += 1
52
+            k += 1
53
+
54
+    # si quedan elementos en la lista izq añadelos en la lista
55
+    while i < len(Left):
56
+        lista[k] = Left[i]
57
+        i += 1
58
+        k += 1
59
+
60
+    # si quedan elementos en la lista derecha añadelos en la lista
61
+    while j < len(Right):
62
+        lista[k] = Right[j]
63
+        j += 1
64
+        k += 1
65
+    
14
     return lista
66
     return lista
15
 
67
 
16
-	
17
 def heapSort(lista):
68
 def heapSort(lista):
18
 	#trabajado por Andrel Fuentes
69
 	#trabajado por Andrel Fuentes
19
 	#definan el algoritmo de ordenamiento heapsort
70
 	#definan el algoritmo de ordenamiento heapsort
37
 	#definan el algoritmo de ordenamiento shellsort
88
 	#definan el algoritmo de ordenamiento shellsort
38
 	return lista
89
 	return lista
39
 
90
 
40
-#######################################################################################
41
-
42
 def heapify(lista, largo, raiz):
91
 def heapify(lista, largo, raiz):
43
 	#trabajado por Andrel Fuentes
92
 	#trabajado por Andrel Fuentes
44
 	#encontrar cual el valor mayor entre de los hijos y raiz
93
 	#encontrar cual el valor mayor entre de los hijos y raiz
63
 		lista[raiz], lista[largest_value] = lista[largest_value], lista[raiz]
112
 		lista[raiz], lista[largest_value] = lista[largest_value], lista[raiz]
64
 		heapify(lista, largo, largest_value)
113
 		heapify(lista, largo, largest_value)
65
 
114
 
66
-#######################################################################################
67
 
115
 
68
 maxValor=1000 	#define el valor maximo de los elementos de la lista
116
 maxValor=1000 	#define el valor maximo de los elementos de la lista
69
 largoLista=1000 #define el largo de las listas a ordenar
117
 largoLista=1000 #define el largo de las listas a ordenar