Преглед изворни кода

Añado aqui la parte del ShellSort

gilberto.cancel пре 3 година
родитељ
комит
2010671372
1 измењених фајлова са 73 додато и 0 уклоњено
  1. 73
    0
      sorting.py

+ 73
- 0
sorting.py Прегледај датотеку

@@ -9,6 +9,14 @@ Al final se imprimen los promedios de cada algortimo
9 9
 from random import randint
10 10
 import time
11 11
 
12
+#Defini esta funcion de swap para facilitarme este paso del sort.
13
+#Lo pueden usar si quieren.
14
+def swap(lista, posicion1, posicion2):
15
+    tmp = lista[posicion1]
16
+    lista[posicion1] = lista[posicion2]
17
+    lista[posicion2] = tmp
18
+
19
+
12 20
 def mergeSort(lista):
13 21
 	#definan el algoritmo de ordenamiento mergesort
14 22
 	return lista
@@ -23,6 +31,71 @@ def quickSort(lista):
23 31
 
24 32
 def shellSort(lista):
25 33
 	#definan el algoritmo de ordenamiento shellsort
34
+        
35
+        #Variable para saber cuando el sort termina
36
+        termine = False
37
+        #Variable para el tamaño de la lista.
38
+        n = len(lista)
39
+        #Variable para la mitad del tamaño de la lista.
40
+        k = int(n/2)
41
+        #Variables para realizar las comparaciones de los elementos.
42
+        i = 0
43
+        j = k
44
+
45
+        #Ciclo donde se realiza el ShellSort.
46
+        while(termine == False):
47
+
48
+            #Comparacion de elementos para ver si se puede hacer un swap.
49
+            if(lista[i] > lista[j]):
50
+                
51
+                swap(lista, i, j)
52
+
53
+                #Variables para retener el valor original de x, y para continuar el sort.
54
+                tmp1 = i
55
+                tmp2 = j
56
+
57
+                #Ciclo para realizar swaps en elementos anteriores luego de encontrar un swap.
58
+                while True:
59
+
60
+                    #Verificacion para prevenir que se busquen elementos fuera de la lista.
61
+                    if((i-k) >= 0):
62
+                        i = i - k
63
+                        j = j -k
64
+                    else:
65
+                        i = tmp1
66
+                        j = tmp2
67
+                        break
68
+                    
69
+                    #Verificacion si se puede hacer otro swap.
70
+                    if(lista[i] > lista[j]):
71
+                        swap(lista, i , j)
72
+                    else:
73
+                        i = tmp1
74
+                        j = tmp2
75
+                        break
76
+
77
+                #Estos ajustes se utilizan para continuar verificando elementos
78
+                #mas adelantes en la lista.
79
+                i = i + 1
80
+                j = j + 1
81
+
82
+            else:
83
+                #Estos ajustes se utilizan para continuar verificando elementos
84
+                #mas adelantes en la lista.
85
+                i = i + 1
86
+                j = j + 1
87
+
88
+
89
+            #Verifica antes de salirse de la lista para poder comenzar otra vuelta con k/2.
90
+            if(j == n)
91
+                k = int(k/2)
92
+                i = 0 
93
+                j = k
94
+
95
+            #Identifica cuando el sort se supone que haya terminado.
96
+            if(k == 0)
97
+                termine = True
98
+
26 99
 	return lista
27 100
 
28 101
 maxValor=1000 	#define el valor maximo de los elementos de la lista