Ernesto Ortiz 3 лет назад
Родитель
Сommit
368e274517
1 измененных файлов: 74 добавлений и 1 удалений
  1. 74
    1
      sorting.py

+ 74
- 1
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
@@ -63,7 +71,72 @@ def quickSort(lista):
63 71
 
64 72
 def shellSort(lista):
65 73
 	#definan el algoritmo de ordenamiento shellsort
66
-	return lista
74
+        
75
+        #Variable para saber cuando el sort termina
76
+        termine = False
77
+        #Variable para el tamaño de la lista.
78
+        n = len(lista)
79
+        #Variable para la mitad del tamaño de la lista.
80
+        k = int(n/2)
81
+        #Variables para realizar las comparaciones de los elementos.
82
+        i = 0
83
+        j = k
84
+
85
+        #Ciclo donde se realiza el ShellSort.
86
+        while(termine == False):
87
+
88
+            #Comparacion de elementos para ver si se puede hacer un swap.
89
+            if(lista[i] > lista[j]):
90
+                
91
+                swap(lista, i, j)
92
+
93
+                #Variables para retener el valor original de x, y para continuar el sort.
94
+                tmp1 = i
95
+                tmp2 = j
96
+
97
+                #Ciclo para realizar swaps en elementos anteriores luego de encontrar un swap.
98
+                while True:
99
+
100
+                    #Verificacion para prevenir que se busquen elementos fuera de la lista.
101
+                    if((i-k) >= 0):
102
+                        i = i - k
103
+                        j = j -k
104
+                    else:
105
+                        i = tmp1
106
+                        j = tmp2
107
+                        break
108
+                    
109
+                    #Verificacion si se puede hacer otro swap.
110
+                    if(lista[i] > lista[j]):
111
+                        swap(lista, i , j)
112
+                    else:
113
+                        i = tmp1
114
+                        j = tmp2
115
+                        break
116
+
117
+                #Estos ajustes se utilizan para continuar verificando elementos
118
+                #mas adelantes en la lista.
119
+                i = i + 1
120
+                j = j + 1
121
+
122
+            else:
123
+                #Estos ajustes se utilizan para continuar verificando elementos
124
+                #mas adelantes en la lista.
125
+                i = i + 1
126
+                j = j + 1
127
+
128
+
129
+            #Verifica antes de salirse de la lista para poder comenzar otra vuelta con k/2.
130
+            if(j == n):
131
+                k = int(k/2)
132
+                i = 0 
133
+                j = k
134
+
135
+            #Identifica cuando el sort se supone que haya terminado.
136
+            if(k == 0):
137
+                termine = True
138
+
139
+        return lista
67 140
 
68 141
 
69 142
 maxValor=1000 	#define el valor maximo de los elementos de la lista