Search code examples
pythonpython-3.xmergesort

Getting "object of type 'NoneType' has no len()" during implementation of mergeSort


I'm trying to implement mergeSort in python but getting Type error.

I tried debugging my code but didn't got any success.

def merge(L, R):
    (C, m, n) = ([], len(L), len(R))
    (i,j) = (0,0)

    while i+j < m+n:
        if i == m: # Case 1 -> List A is empty
            C.append(R[j])
            j += 1
        elif j == n: # Case 2 -> List B is empty
            C.append(L[i])
            i += 1
        elif L[i] <= R[j]: # Case 3 -> Head of A is smaller 
            C.append(L[i])
            i += 1
        elif L[i] > R[j]:
            C.append(R[j])
            j += 1
    print(C)

def mergeSort(A, left, right):

    if right - left <= 1: # Base Case
        return(A[left:right])
    if right - left > 1: # Recurive call
        mid = (left+right)//2

        L = mergeSort(A, left, mid)
        R = mergeSort(A, mid, right)

        return(merge(L, R))

If anyone know what I'm doing wrong, please guide me to the right way.


Solution

  • merge has to return C, not print it.

    def merge(L, R):
        (C, m, n) = ([], len(L), len(R))
        (i,j) = (0,0)
    
        while i+j < m+n:
            if i == m: # Case 1 -> List A is empty
                C.append(R[j])
                j += 1
            elif j == n: # Case 2 -> List B is empty
                C.append(L[i])
                i += 1
            elif L[i] <= R[j]: # Case 3 -> Head of A is smaller 
                C.append(L[i])
                i += 1
            elif L[i] > R[j]:
                C.append(R[j])
                j += 1
        return C