def merge( listA, listB):
    mergeList = []
    i = 0
    j = 0
    while i < len(listA) and j < len(listB):
        if listA[i] < listB[j]:
            mergeList.append(listA[i])
            i += 1
        else:
            mergeList.append(listB[j])
            j += 1

    # check to see if listA  or list B has non merged elements
    while i < len(listA):
        mergeList.append(listA[i])
        i += 1

    while j < len(listB):
        mergeList.append(listB[j])
        j += 1

    return mergeList

def mergeSort(aList):
    if len(aList) > 1:
        mid = len(aList) // 2
        leftList = aList[:mid]
        rightList = aList[mid:]
        leftSorted = mergeSort(leftList)
        rightSorted = mergeSort(rightList)
        mergedList = merge(leftSorted, rightSorted)
        return mergedList
    else:
        return aList

myList = [7,5,3,8,2,6,1,4]
sortedList = mergeSort(myList)
print(sortedList)