Problème de tri de fusion dans le code JavaScript : impossible de résoudre l'erreur malgré le débogage
P粉256487077
2023-08-18 14:25:39
<p>J'essaie de comprendre tous les algorithmes de tri, voici le code que j'ai écrit pour le tri par fusion mais il ne fonctionne pas, pouvez-vous m'indiquer ce qui ne va pas :</p>
<pre class="brush:php;toolbar:false;">solve : fonction (A) {
let count = this.mergeSort(A);
nombre de retours ;
},
mergeTwoSortedArrays : fonction (A, B) {
soit je = 0 ;
soit j = 0 ;
soit k = 0 ;
soit C = [];
while (i < A.length && j < B.length && A[i] || B[j]) {
si (A[i] < B[j]) {
C[k] = UNE[je];
je++;
k++;
}
autre {
C[k] = B[j];
j++;
k++;
}
}
tandis que (j &Lt ; B.longueur) {
C[k] = B[j];
k++;
j++;
}
tandis que (je &Lt ; A.length) {
C[k] = UNE[je];
k++;
je++;
}
retourner C ;
},
mergeSort : fonction (a) {
soit n = a.length;
si (n <= 1) renvoie un ;
soit c = Array.from({ longueur : Math.floor(n / 2) }, (_, i) => a[i]);
soit d = Array.from({ length: n - c.length }, (_, i) => a[c.length + i]);
renvoie this.mergeTwoSortedArrays(c, d);
}</pré>
<p>D'accord, la question m'oblige à ajouter plus de détails pour obtenir l'approbation.
Mon approche est donc la suivante : divisez le tableau en deux parties égales jusqu'à ce qu'elles deviennent un tableau d'un élément, puis utilisez une technique de fusion pour fusionner les deux tableaux triés. </p>
Vous devez simplement vérifier i < A.length && j <
Voici votre code mis à jour :