Sorting algorithms implemented in python.
https:
def selection_sort(array :list)->list:
for idx_y, _ in enumerate(array):
min_idx = idx_y
for idx in range(idx_y,len(array)):
if array[idx] < array[min_idx]: min_idx = idx
array[min_idx], array[idx_y] = array[idx_y], array[min_idx]
return array
def _insertion_sort(array :list)->list:
for index in range(1,len(array)):
back=index-1
while back>=0 and array[back] > array[back+1]:
array[back], array[back+1] = array[back+1], array[back]
back-=1
return array
def quick_sort(array :list)->list:
def _quick_sort(array :list)->list:
if len(array)<=1: return array
pivot, is_bigger = array.pop(), lambda x: x>pivot
left_partition = _quick_sort([x for x in array if not is_bigger(x)])
right_partition = _quick_sort([x for x in array if is_bigger(x)])
return [*left_partition, pivot, *right_partition]
return _quick_sort(array)
def radix_sort(array :list)->list:
base, max_length = 10, len(str(max(array)))
flat_map = lambda arr: reduce(lambda acc, curr: [*acc,*curr], arr)
for n in range(max_length):
bucket=[[] for _ in range(base)]
for item in array: bucket[item
array = flat_map(bucket)
return array
def bucket_sort(array :list)->list:
BUCKET_SIZE = ceil(len(array)**(3/4))
min_val, max_val = min(array), max(array)
RANGE = (max_val-min_val+1)/BUCKET_SIZE
bucket = [[] for _ in range(BUCKET_SIZE)]
get_idx = lambda num: int((num-min_val)/RANGE)
for num in array: bucket[get_idx(num)].append(num)
for x in bucket: _insertion_sort(x)
flat_map = lambda arr: reduce(lambda acc, curr: [*acc,*curr], arr)
return flat_map(bucket)
def _shell_sort(array: list)->list:
LENGTH, gap= len(array), len(array)
while gap>0:
for j in range(gap, LENGTH):
i=j-gap
while i>=0:
if array[i+gap]>array[i]: break
else: array[i+gap],array[i]=array[i],array[i+gap]
i=i-gap
gap=gap
return array