@@ -22,6 +22,7 @@ def bubble(nlist):
22
22
if nlist [j ] > nlist [j + 1 ]:
23
23
nlist [j + 1 ], nlist [j ] = nlist [j ], nlist [j + 1 ]
24
24
exchanges = True
25
+
25
26
return nlist
26
27
27
28
def insertion (nlist ):
@@ -39,6 +40,7 @@ def insertion(nlist):
39
40
nlist [j + 1 ] = nlist [j ]
40
41
j -= 1
41
42
nlist [j + 1 ] = key
43
+
42
44
return nlist
43
45
44
46
def selection (nlist ):
@@ -53,8 +55,9 @@ def selection(nlist):
53
55
for j in range (i + 1 , size ):
54
56
if nlist [j ] < nlist [lower ]:
55
57
lower = j
56
- print ( nlist )
58
+
57
59
nlist [i ], nlist [lower ] = nlist [lower ], nlist [i ]
60
+
58
61
return nlist
59
62
60
63
def quick (nlist ):
@@ -85,6 +88,7 @@ def merge(nlist):
85
88
result .append (l .pop (0 ))
86
89
87
90
result .extend (l + r )
91
+
88
92
return result
89
93
90
94
def shell (nlist ):
@@ -123,6 +127,7 @@ def heap(nlist):
123
127
for end in range (size - 1 , 0 , - 1 ):
124
128
nlist [end ], nlist [0 ] = nlist [0 ], nlist [end ]
125
129
_max_heap (nlist , 0 , end - 1 )
130
+
126
131
return nlist
127
132
128
133
def _max_heap (nlist , root , end ):
@@ -195,48 +200,107 @@ def radix(aList):
195
200
196
201
return nlist
197
202
198
- import math
199
-
200
- DEFAULT_BUCKET_SIZE = 5
201
-
202
- def bucket (array , bucketSize = DEFAULT_BUCKET_SIZE ):
203
- if len (array ) == 0 :
204
- return array
203
+ def bucket (aList , bucketSize = 5 ):
204
+ nlist = list (aList )
205
+ size = len (nlist )
206
+
207
+ if size < 2 :
208
+ return nlist
205
209
206
- # Determine minimum and maximum values
207
- minValue = array [0 ]
208
- maxValue = array [0 ]
209
- for i in range (1 , len (array )):
210
- if array [i ] < minValue :
211
- minValue = array [i ]
212
- elif array [i ] > maxValue :
213
- maxValue = array [i ]
210
+ minValue = min (nlist )
211
+ maxValue = max (nlist )
214
212
215
- # Initialize buckets
216
213
bucketCount = math .floor ((maxValue - minValue ) / bucketSize ) + 1
217
214
buckets = []
215
+
218
216
for i in range (0 , bucketCount ):
219
217
buckets .append ([])
220
218
221
- # Distribute input array values into buckets
222
- for i in range (0 , len (array )):
223
- buckets [math .floor ((array [i ] - minValue ) / bucketSize )].append (array [i ])
219
+ for i in range (0 , size ):
220
+ buckets [math .floor ((nlist [i ] - minValue ) / bucketSize )].append (nlist [i ])
224
221
225
- # Sort buckets and place back into input array
226
- array = []
222
+ nlist = []
227
223
for i in range (0 , len (buckets )):
228
- insertion (buckets [i ])
224
+ buckets [ i ] = insertion (buckets [i ])
229
225
for j in range (0 , len (buckets [i ])):
230
- array .append (buckets [i ][j ])
226
+ nlist .append (buckets [i ][j ])
231
227
232
- return array
228
+ return nlist
233
229
230
+ def gnome (aList ):
231
+ nlist = list (aList )
232
+ size = len (nlist )
234
233
234
+ if size < 2 :
235
+ return nlist
235
236
237
+ pivot = 0
238
+ nlist_length = len (nlist )
239
+ while pivot < nlist_length - 1 :
240
+ if nlist [pivot ] > nlist [pivot + 1 ]:
241
+ nlist [pivot + 1 ], nlist [pivot ] = nlist [pivot ], nlist [pivot + 1 ]
242
+ if pivot > 0 :
243
+ pivot -= 2
244
+ pivot += 1
245
+
246
+ return nlist
236
247
248
+ def comb (aList ):
249
+ nlist = list (aList )
250
+ size = len (nlist )
251
+
252
+ if size < 2 :
253
+ return nlist
237
254
255
+ gap = size
256
+ swaps = True
238
257
258
+ while gap > 1 or swaps :
259
+ gap = max (1 , int (gap / 1.25 )) # Minimun gap is 1
260
+ swaps = False
261
+
262
+ for i in range (size - gap ):
263
+ j = i + gap
239
264
265
+ if nlist [i ] > nlist [j ]:
266
+ nlist [i ], nlist [j ] = nlist [j ], nlist [i ]
267
+ swaps = True
268
+ print (nlist )
269
+ return nlist
270
+
271
+ def cocktail (aList ):
272
+ nlist = list (aList )
273
+ size = len (nlist )
274
+
275
+ if size < 2 :
276
+ return nlist
277
+
278
+ swapped = True
279
+ i = 0
280
+ j = size - 1
281
+
282
+ while i < j and swapped :
283
+ for k in range (i , j ):
284
+ if nlist [k ] > nlist [k + 1 ]:
285
+ nlist [k ], nlist [k + 1 ] = nlist [k + 1 ], nlist [k ]
286
+ swapped = True
287
+ j -= 1
288
+
289
+ if swapped :
290
+ swapped = False
291
+ for k in range (j , i , - 1 ):
292
+ if nlist [k ] < nlist [k - 1 ]:
293
+ nlist [k ], nlist [k - 1 ] = nlist [k - 1 ], nlist [k ]
294
+ swapped = True
295
+
296
+ i += 1
297
+
298
+ if not swapped :
299
+ return nlist
300
+
301
+
302
+
303
+
240
304
241
305
242
306
0 commit comments