Ho scritto questo codice che dovrebbe implementare l'algoritmo Merge Sort ma c'è qualcosa che non va:
Codice PHP:
private static <T extends Comparable<T>> void mergeSort(T[] array,
int leftIndex, int rightIndex, T[] leftArray, T[] rightArray) {
if (leftIndex >= rightIndex)
return;
int middleIndex = (leftIndex + rightIndex) / 2;
mergeSort(array, leftIndex, middleIndex, leftArray, rightArray);
mergeSort(array, middleIndex + 1, rightIndex, leftArray, rightArray);
/* Da qui fai il merge */
int left = 0;
int right = 0;
int leftLength = middleIndex - leftIndex + 1;
int rightLength = rightIndex - middleIndex;
System.arraycopy(array, leftIndex, leftArray, 0, leftLength);
System.arraycopy(array, middleIndex + 1, rightArray, 0, rightLength);
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 <T 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.length, leftArray, rightArray);
}
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