Recursive Merge Sort
BEGIN recursive merge sort(elements) IF length of elements > 1 THEN #---------------- 1. RECURSIVELY BREAK APART: SET halfway_point TO length of elements divided by 2 SET left_half TO elements up to halfway_point SET right_half TO remaining elements past halfway_point CALL recursive merge sort(left_half) #--- NOTHING CAUGHT CALL recursive merge sort(right_half) #--- ON RETURN #---------------- 2. SORT AND MERGE HALF SEGMENTS INTO WHOLE: SET elements to empty list WHILE length of left_half > 0 AND length of right_half > 1 IF first element in left_half < first element in right_half THEN APPEND first element in left_half TO elements REMOVE first element in left_half ELSE APPEND first element in right_half TO elements REMOVE first element in right_half END IF END WHILE FOR remaining_element in left_half APPEND remaining_element TO elements END FOR FOR remaining_element in right_half APPEND remaining_element TO elements END FOR END IF END recursive merge sort
def mergeSort(a): if len(a) > 1: #---------------- 1. RECURSIVELY BREAK APART: mid = len(a) // 2 L = a[:mid] R = a[mid:] mergeSort(L) #--- NOTHING CAUGHT mergeSort(R) #--- ON RETURN #---------------- 2. SORT AND MERGE HALF SEGMENTS INTO WHOLE: a.clear() while len(L) > 0 and len(R) > 0: if L[0] <= R[0]: a.append(L[0]) L.pop(0) else: a.append(R[0]) R.pop(0) for i in L: a.append(i) for i in R: a.append(i) return a #---------------- ONLY CAUGHT ON FINAL RETURN: print(mergeSort([12,999,123,-4,11,5,51]))