def shell_sort(alist):
sublist_count = len(alist) // 2
while sublist_count > 0:
for start_position in range(sublist_count):
insertion_sort_gap(alist, start_position, sublist_count)
sublist_count = sublist_count // 2
def insertion_sort_gap(alist, start, gap):
for index in range(start + gap, len(alist), gap):
current_value = alist[index]
position = index
while alist[position - gap] > current_value and position >= gap:
alist[position] = alist[position - gap]
position = position - gap
alist[position] = current_value
if __name__ == '__main__':
alist = [5, 3, 1, 4, 2, 3]
shell_sort(alist)
print(alist)