Browse Source

mergeSort by Michael

Michael Terrefortes Rosado 2 years ago
parent
commit
5df23a7127
1 changed files with 53 additions and 2 deletions
  1. 53
    2
      sorting.py

+ 53
- 2
sorting.py View File

@@ -10,9 +10,60 @@ from random import randint
10 10
 import time
11 11
 
12 12
 def mergeSort(lista):
13
-	#definan el algoritmo de ordenamiento mergesort
14
-	return 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
15 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
+    return lista
65
+
66
+	
16 67
 def heapSort(lista):
17 68
 	#definan el algoritmo de ordenamiento heapsort
18 69
 	return lista