401 data structures and algorithms code challenges
Review the pseudocode below, then trace the algorithm by stepping through the process with the provided sample array. Document your explanation by creating a blog article that shows the step-by-step output after each iteration through some sort of visual.
Once you are done with your article, code a working, tested implementation of Merge Sort based on the pseudocode provided.
list
left
and right
listsmerge
methodleft
, right
, and original
list
ALGORITHM Mergesort(arr)
DECLARE n <-- arr.length
if n > 1
DECLARE mid <-- n/2
DECLARE left <-- arr[0...mid]
DECLARE right <-- arr[mid...n]
// sort the left side
Mergesort(left)
// sort the right side
Mergesort(right)
// merge the sorted left and right sides together
Merge(left, right, arr)
ALGORITHM Merge(left, right, arr)
DECLARE i <-- 0
DECLARE j <-- 0
DECLARE k <-- 0
while i < left.length && j < right.length
if left[i] <= right[j]
arr[k] <-- left[i]
i <-- i + 1
else
arr[k] <-- right[j]
j <-- j + 1
k <-- k + 1
if i = left.length
set remaining entries in arr to remaining values in right
else
set remaining entries in arr to remaining values in left
def merge_sort(list):
n = len(list)
if n > 1:
mid = n//2
left = list[:mid]
right = list[mid:]
merge_sort(left)
merge_sort(right)
merge(left, right, list)
return list
def merge(left, right, list):
i, j, k = 0, 0, 0
while i < len(left) and j < len(right):
if left[i] <= right[j]:
list[k] = left[i]
i += 1
else:
list[k] = right[j]
j += 1
k += 1
if i == len(left):
while j < len(right):
list[k] = right[j]
j += 1
k += 1
else:
while i < len(left):
list[k] = left[i]
i = i + 1
k = k + 1
[8,4,23,42,16,15]
For your own understanding, consider also stepping through these inputs:
[20,18,12,8,5,-2]
[5,12,7,5,5,7]
[2,3,5,7,13,11]
Share your article on LinkedIn, so that your network knows how awesome you are.