|
@ -0,0 +1,35 @@ |
|
|
|
|
|
def bucket_sort(alist): |
|
|
|
|
|
largest = max(alist) |
|
|
|
|
|
length = len(alist) |
|
|
|
|
|
size = largest/length |
|
|
|
|
|
|
|
|
|
|
|
buckets = [[] for _ in range(length)] |
|
|
|
|
|
for i in range(length): |
|
|
|
|
|
j = int(alist[i]/size) |
|
|
|
|
|
if j != length: |
|
|
|
|
|
buckets[j].append(alist[i]) |
|
|
|
|
|
else: |
|
|
|
|
|
buckets[length - 1].append(alist[i]) |
|
|
|
|
|
|
|
|
|
|
|
for i in range(length): |
|
|
|
|
|
insertion_sort(buckets[i]) |
|
|
|
|
|
|
|
|
|
|
|
result = [] |
|
|
|
|
|
for i in range(length): |
|
|
|
|
|
result = result + buckets[i] |
|
|
|
|
|
|
|
|
|
|
|
return result |
|
|
|
|
|
|
|
|
|
|
|
def insertion_sort(alist): |
|
|
|
|
|
for i in range(1, len(alist)): |
|
|
|
|
|
temp = alist[i] |
|
|
|
|
|
j = i - 1 |
|
|
|
|
|
while (j >= 0 and temp < alist[j]): |
|
|
|
|
|
alist[j + 1] = alist[j] |
|
|
|
|
|
j = j - 1 |
|
|
|
|
|
alist[j + 1] = temp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
alist = [54,26,93,17,77,31,44,55,20] |
|
|
|
|
|
print(bucket_sort(alist)) |