En essayant de créer une méthode qui me permettra de trier un tableau de chaînes de Java en utilisant mergesort. J'ai regardé quelques exemples de code et ai fait mon propre algorithme, mais cela ne semble pas fonctionner et j'ai quelques difficultés à trouver le problème. Le code est le suivant:Java Mergesort strings
/*
* Sorting methods, implemented using mergesort to sort the array of names
* alphabetically
*/
public String[] sort(String[] array) {
// check if the number of elements < 2
if (array.length > 1) {
// divide into two smaller arrays
// determine length of two smaller arrays
int arrLen1 = array.length;
int arrLen2 = array.length - arrLen1;
// populate smaller arrays with elements from initial array
String[] array1 = new String[arrLen1];
String[] array2 = new String[arrLen2];
for (int i = 0; i < arrLen1; i++) {
array[i] = array1[i];
}
for (int i = arrLen1; i < array.length; i++) {
array[i] = array2[i];
}
// now that we have the two halves, we can recursively call sort() on each to sort them
array1 = sort(array1);
array2 = sort(array2);
// three counters are needed to keep track of where we are in the arrays, one for pos in final array, and one for each of the two halves
// i => pos in main array
// j => pos in array1
// k => pos in array2
int i = 0, j = 0, k = 0;
while (array1.length != j && array2.length != k) {
if (array1[i].compareTo(array2[i]) < 0) {
// copy current element of array1 to final array as it preceeds array2's current element
array[i] = array1[j];
// increment the final array so we dont overwrite the value we just inserted
i++;
// increment array1 which we took the element from so we dont compare it again
j++;
}
// If the element in array2 preceeds the element in array1
else {
// copy current element of array1 to final array as it preceeds array1's current element
array[i] = array2[j];
// increment the final array so we dont overwrite the value we just inserted
i++;
// increment array2 which we took the element from so we dont compare it again
k++;
}
}
// at this point one of the sub arrays have been exhausted, and no more elements to compare
while (array1.length != j) {
array[i] = array1[j];
i++;
j++;
}
while (array2.length != k) {
array[i] = array2[k];
i++;
k++;
}
}
return array;
}
Essayez d'ajouter la journalisation à chaque appel de tri et testez avec de petits tableaux où vous savez comment il doit se comporter. –