merge sort with Big-O analysis