Here is merge sort, which was discussed in class. It sorts a list (array) by dividing it in half, sorting each half, and merging the sorted parts. This is done using recursion. The base case is a list that has 0 or 1 items, which needs no action.
To test this out, here are two classes with mains. One creates an array of String, sorts it using Merge Sort, prints it out, then lets the user search for Strings with Binary Search, discussed earlier. The other does the same thing, using Integer instead of String.