#Sorting#Computer-Science#CS251 Merge sort is a recursive algorithm. It uses a divide and conquer strategy to split the array up and recombine it in a sorted order.

Pseudocode

MergeSort(A: array, l: left index, r: right index)
	if (l < r)
		m <- (l+r)/2 // middle index
		MergeSort(A, l, m)
		MergeSort(A, m+1, r)
		Merge(A, l, m, r)
	end if
	return A
end MergeSort

Merge Sort is NOT in place

Runtime Analysis

Merge() runs in time

Merge(A, l, m, r)

Pseudocode

Merge(A, l, m, r)
	n1 <- m - l + 1
	n2 <- r - m
	let L and R be array of sizes n1+1 and n2+1 respectively
	for (i = 0 to n1-1)
		L[i] <- A[l+i]
	endfor
	for (j=0 to n2-1)
		R[j] <- A[m+j+1]
	endfor
	L[n1] <- infinity, R[n2] <- infinity
	i=0, j=0
	for (k=l to r-1)
		if (L[i] <= R[j])
			A[k] <- L[i]
			i+=1
		else
			A[k] <- R[j]
			j+=1
		endif
	endfor
	return A
end Merge

Example of merging

Final Details of Merge Sort

Merge sort runtime

Is stable Is not in place Machine friendly (more so than Heap Sort)

  • Linear access of memory compared to jumping around