Je suis dans un cours d'algorithmes et j'apprends le tri par fusion. Notre professeur nous a recommandé d'essayer d'implémenter le pseudo code fourni dans le livre.Fusionner les questions de mise en œuvre du tri en Java
- je raison de l'utilisation en tant que valeur Integer.MAX_VALUE sentinelle lorsque tri un tableau d'entiers (utilisé dans les lignes 8 & 9 dans le pseudo-code de la méthode de fusion ci-dessous)?
- Pour la ligne 2 de la méthode de pseudo-code Merge-Sort, est-il correct de coder en Java en utilisant Math.ceil() comme je l'ai fait? (Edit: Il est en fait étage et je mis à jour mon code pour en tenir compte.)
Si vous voyez d'autres erreurs s'il vous plaît laissez-moi savoir!
Voici le pseudo code donné par le livre pour le tri par fusion.
Et, voici comment je codé en Java:
public void mergeSort(int[] arrNums, int p, int r) {
if (p < r) {
int q = (p + r)/2;
mergeSort(arrNums, p, q);
mergeSort(arrNums, q + 1, r);
merge(arrNums, p, q, r);
}
}
public void merge(int[] arrNums, int p, int q, int r) {
int nOne = q - p + 1;
int nTwo = r - q;
int[] arrLeft = new int[nOne + 1];
int[] arrRight = new int[nTwo + 1];
for (int i = 0; i < nOne; i++) {
arrLeft[i] = arrNums[p + i - 1];
}
for (int j = 0; j < nTwo; j++) {
arrRight[j] = arrNums[q + j];
}
arrLeft[nOne] = Integer.MAX_VALUE;
arrRight[nTwo] = Integer.MAX_VALUE;
// Tracks arrLeft index
int i = 0;
// Tracks arrRight index
int j = 0;
for (int k = p; k < r; k++) {
if (arrLeft[i] <= arrRight[j]) {
arrNums[k] = arrLeft[i];
i++;
} else {
arrNums[k] = arrRight[j];
j++;
}
}
}
Ce n'est pas "ceil" dans le pseudo code, c'est "floor". Et si vous opérez sur des entiers, c'est implicite de toute façon. –
Une alternative à l'utilisation de l'infini .. est de vérifier si les tableaux de gauche ou de droite n'ont plus de variables, alors vous butez le reste de l'autre dans le tableau principal. –
@ShadyAtef "muet le reste ??" Vouliez-vous dire "dump"? – ajb