Quellcode durchsuchen

added michael sorting

Michael Terrefortes Rosado vor 2 Jahren
Ursprung
Commit
06d0c4eeae
1 geänderte Dateien mit 52 neuen und 4 gelöschten Zeilen
  1. 52
    4
      sorting.py

+ 52
- 4
sorting.py Datei anzeigen

@@ -11,9 +11,60 @@ from random import randint
11 11
 import time
12 12
 
13 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 66
     return lista
15 67
 
16
-	
17 68
 def heapSort(lista):
18 69
 	#trabajado por Andrel Fuentes
19 70
 	#definan el algoritmo de ordenamiento heapsort
@@ -37,8 +88,6 @@ def shellSort(lista):
37 88
 	#definan el algoritmo de ordenamiento shellsort
38 89
 	return lista
39 90
 
40
-#######################################################################################
41
-
42 91
 def heapify(lista, largo, raiz):
43 92
 	#trabajado por Andrel Fuentes
44 93
 	#encontrar cual el valor mayor entre de los hijos y raiz
@@ -63,7 +112,6 @@ def heapify(lista, largo, raiz):
63 112
 		lista[raiz], lista[largest_value] = lista[largest_value], lista[raiz]
64 113
 		heapify(lista, largo, largest_value)
65 114
 
66
-#######################################################################################
67 115
 
68 116
 maxValor=1000 	#define el valor maximo de los elementos de la lista
69 117
 largoLista=1000 #define el largo de las listas a ordenar