Ho scritto questo codice che dovrebbe implementare l'algoritmo Merge Sort ma c'è qualcosa che non va:

Codice PHP:
private static <extends Comparable<T>> void mergeSort(T[] array,
        
int leftIndexint rightIndexT[] leftArrayT[] rightArray) {
    if (
leftIndex >= rightIndex)
        return;

    
int middleIndex = (leftIndex rightIndex) / 2;

    
mergeSort(array, leftIndexmiddleIndexleftArrayrightArray);
    
mergeSort(array, middleIndex 1rightIndexleftArrayrightArray);

        
/* Da qui fai il merge */
    
int left 0;
    
int right 0;
    
int leftLength middleIndex leftIndex 1;
    
int rightLength rightIndex middleIndex;

    
System.arraycopy(array, leftIndexleftArray0leftLength);
    
System.arraycopy(array, middleIndex 1rightArray0rightLength);

    while ((
left <= leftLength) && (right <= rightLength)) {
        array[
leftIndex++] = (leftArray[left].compareTo(rightArray[right]) <= 0) ? leftArray[left++] : rightArray[right++]; // <--- QUI NullPointerException
    
}

    while (
leftIndex <= leftLength) {
        array[
leftIndex++] = leftArray[leftIndex++];
    }

    while (
rightIndex <= rightLength) {
        array[
leftIndex++] = rightArray[rightIndex++];
    }
    }

///// edit:

    
public static <extends Comparable<T>> void mergeSort(T[] array) {
    
int length = (array.length 1) / 2;

    
T[] leftArray = (T[]) new Comparable[length];
    
T[] rightArray = (T[]) new Comparable[length];

    
mergeSort(array, 0, array.lengthleftArrayrightArray);
    } 
Cosa ho sbagliato?

Praticamente salta fuori una NullPointerException nel punto indicato nel sorgente (in compareTo) e non riesco a sistemare... Forse è una stupidata ma con tutti quegli indici inizio a perdermi..

Grazie

edit:
ho poi un problema coi generici.. Ho bisogno di creare 2 vettori di tipo T ma a quanto pare non si puo'... :|
Ho "risolto" con
T[] leftArray = (T[]) new Comparable[length];
T[] rightArray = (T[]) new Comparable[length];
ma non mi pare una buona soluzione... Come si puo' fare in un modo un po' migliore?

Grazie mille