Merge sort implementation and improvements
one of the things you can do is pass in the original array to merge and use that as result:

    return merge(sortedLeft, sortedRight, array);
}


and 

private int[] merge(int[] first, int[] second, int[] result) {

    int posFirst = 0;
    int posSecond = 0;
    int resultPos = 0;


This reduces the space needed during the merge portion. Though at the cost of modifying the array the user put in.