def merge_sort(a):
if len(a)<=1:
return a
left = merge_sort(a[:len(a)//2])
//print('this is left step {}'.format(left))
right = merge_sort(a[len(a)//2:])
//print('this is right step {}'.format(right))
return merge(left, right)
i understand algebraic recursive functions i understand how it works.
what i dont understand is how merge_sort(a[len(a)//2:])
is getting just one number from the passed in list called 'a' (i have a def create_random_array that passes in random list of numbers ).
my thinking was that it would first split the list in half-witch I could see in my print function, then it would split it again , and again until there is only one that can then be compared.
how does merge_sort(a[len(a)//2:])
work
other part of the code that might be useful to understand my mess
def create_array(size = 5, max = 10):
from random import randint
return [randint(0,max) for _ in range(size)]
def merge(a,b):
c = []
a_idx = 0
b_idx = 0
print(a[a_idx])
print(b[b_idx])
while a_idx<len(a) and b_idx<len(b):
if a[a_idx]<b[b_idx]:
c.append(a[a_idx])
a_idx+=1
else:
c.append(b[b_idx])
b_idx+=1
if a_idx==len(a):
c.extend(b[b_idx:])
else:
c.extend(a[a_idx:])
return c