KotlinJava

← Prev

Index

Next →

Kotlin
Java

Merge Sort

int[] merge(int[] first, int[] second) {
return null;
}

This lesson continues our exploration of sorting by examining a new approach. We’ll start with a simple but powerful observation, and then examine how to build on it to create a complete sorting algorithm. This will also represent our first sorting algorithm that achieves best-case sorting performance! What are we waiting for?

.css-m9uayu{margin:0;font-family:'__Source_Code_Pro_ceb1b8','__Source_Code_Pro_Fallback_ceb1b8',monospace;color:#ff9900;}[data-mui-color-scheme="dark"] .css-m9uayu{color:#92a8ca;}`merge``merge`

We’ll begin with an observation.

Next, let’s implement `merge` on two `int` arrays and confirm our hunch about its performance.

// Implement merge

MergesortMergesort

Next let’s consider how to design a sorting algorithm that utilize our `merge` method. We’ll also use this as a chance to point out how we can apply recursive algorithms on arrays, rather than trees, which we’ve used in the past.

Finally, let’s analyze the performance of Mergesort. This is an interesting case! Let’s walk through it carefully.

Solve: Mergesort

Created By: Geoffrey Challen
/ Version: 2020.11.0

Create a public class named `Mergesort` that provides a single instance method (this is required for testing) named `mergesort`. `mergesort` accepts an array of `int`s and returns a sorted (ascending) array. You should not modify the passed array. If the array that is passed is `null` you should throw an `IllegalArgumentException`.

`Mergesort` should extend `Merge`, and its parent provides several helpful methods:

• `int[] merge(int[] first, int[] second)`: this merges two sorted arrays into a second sorted array. If either array is `null` it throws an `IllegalArgumentException`, so don't call it on `null` arrays.
• `int[] copyOfRange(int[] original, int from, int to)`: this acts as a wrapper on `java.util.Arrays.copyOfRange`, accepting the same arguments and using them in the same way.

(You can't use `java.util.Arrays` in this problem for reasons that will become obvious if you inspect the rest of the documentation...)

Note that you do need to use `merge` and call it the correct number of times. This will be tested during grading. You should use an array of size 1 or 0 as your base case.

More Practice

Need more practice? Head over to the practice page.