|
@@ -53,9 +53,34 @@ def quickSort(lista):
|
53
|
53
|
#definan el algoritmo de ordenamiento quicksort
|
54
|
54
|
return lista
|
55
|
55
|
|
56
|
|
-def shellSort(lista):
|
57
|
|
- #definan el algoritmo de ordenamiento shellsort
|
58
|
|
- return lista
|
|
56
|
+# inplace
|
|
57
|
+# complexity: O(N^2)
|
|
58
|
+def shellSort(lst):
|
|
59
|
+ # initial gap
|
|
60
|
+ gap = len(lst)
|
|
61
|
+
|
|
62
|
+ while 0 < gap:
|
|
63
|
+ # sort every sublist with given gap
|
|
64
|
+ for start in range(gap):
|
|
65
|
+ f = range(start, len(lst), gap)
|
|
66
|
+ s = range(start + gap, len(lst), gap)
|
|
67
|
+
|
|
68
|
+ # bubble sort on sublist
|
|
69
|
+ swapped = True
|
|
70
|
+ while swapped:
|
|
71
|
+ swapped = False
|
|
72
|
+
|
|
73
|
+ # iterate through every adjacent pair in sublist
|
|
74
|
+ for c, n in zip(f, s):
|
|
75
|
+ if lst[n] < lst[c]:
|
|
76
|
+ lst[c], lst[n] = lst[n], lst[c]
|
|
77
|
+ swapped = True
|
|
78
|
+
|
|
79
|
+ # reduce gap towards 0
|
|
80
|
+ gap = gap // 2
|
|
81
|
+
|
|
82
|
+ return lst
|
|
83
|
+
|
59
|
84
|
|
60
|
85
|
# timeCode function/thunk -> (duration, return value)
|
61
|
86
|
# measures the time it takes for a function/thunk to return
|