"""This is a Python implementation of the shell sort algorithm
Shell sort is a variation of insertion sort. This method starts by sorting
pairs of elements far away from each other, then progressively reducing the
gap between elements to be compared.
"""
from random import randint
def shell_sort(arr):
n = len(arr)
gap = n//2
while gap > 0:
for i in range(gap, n):
tmp = arr[i]
j = i
while j >= gap and arr[j-gap] > tmp:
arr[j] = arr[j-gap]
j -= gap
arr[j] = tmp
gap //= 2
return arr
# Tests
if __name__ == '__main__':
print(shell_sort([randint(0, 1000) for _ in range(10)]))
print(shell_sort([randint(-500, 500) for _ in range(10)]))