gokaymeydan's picture
Initial commit
8b76633
raw
history blame
1.84 kB
def insertion_sort(arr):
steps = [] # keep all steps here
a = arr.copy()
for i in range(1, len(a)):
key = a[i]
j = i - 1
while j >= 0 and a[j] > key:
a[j + 1] = a[j]
steps.append(
{"array": a.copy(), "active_index": j + 1, "sorted_boundary": i}
)
j -= 1
a[j + 1] = key
steps.append(
{"array": a.copy(), "active_index": j + 1, "sorted_boundary": i}
) # save every moment
return steps
def merge_sort(arr):
steps = []
a = arr.copy()
merge_sort_recursive(a, 0, len(a) - 1, steps)
return steps
def merge_sort_recursive(arr,left,right,steps):
if left < right:
mid = (left + right) // 2
merge_sort_recursive(arr, left, mid, steps)
merge_sort_recursive(arr, mid + 1, right, steps)
merge(arr, left, mid, right, steps)
def merge(arr, left, mid, right, steps):
left_part = arr[left:mid+1]
right_part = arr[mid + 1:right+1]
i = j = 0
k = left
while i < len(left_part) and j < len(right_part):
if left_part[i] <= right_part[j]:
arr[k] = left_part[i]
steps.append({"array": arr.copy(), "active_index":k, "sorted_boundary": right})
i += 1
else:
arr[k] = right_part[j]
steps.append({"array": arr.copy(), "active_index":k, "sorted_boundary": right})
j += 1
k += 1
while i < len(left_part):
arr[k] = left_part[i]
steps.append({"array": arr.copy(), "active_index":k, "sorted_boundary": right})
i += 1
k += 1
while j < len(right_part):
arr[k] = right_part[j]
steps.append({"array": arr.copy(), "active_index":k, "sorted_boundary": right})
j += 1
k += 1