Problème de tri de fusion dans le code JavaScript : impossible de résoudre l'erreur malgré le débogage
P粉256487077
P粉256487077 2023-08-18 14:25:39
0
1
517

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 :

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); } 

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粉256487077
P粉256487077

répondre à tous (1)
P粉068510991

Vous devez simplement vérifier i < A.length && j <

Voici votre code mis à jour :

const mergeSort = { solve: function (A) { return this.mergeSortFunction(A); }, mergeTwoSortedArrays: function (A, B) { let i = 0; let j = 0; let k = 0; let C = []; while (i < A.length && j < B.length) { if (A[i] < B[j]) { C[k] = A[i]; i++; k++; } else { C[k] = B[j]; j++; k++; } } while (j < B.length) { C[k] = B[j]; k++; j++; } while (i < A.length) { C[k] = A[i]; k++; i++; } return C; }, mergeSortFunction: function (a) { let n = a.length; if (n <= 1) return a; let c = Array.from({ length: Math.floor(n / 2) }, (_, i) => a[i]); let d = Array.from({ length: n - c.length }, (_, i) => a[c.length + i]); return this.mergeTwoSortedArrays(this.mergeSortFunction(c), this.mergeSortFunction(d)); } }; // 示例 const inputArray = [38, 27, 43, 3, 9, 82, 10]; const sortedArray = mergeSort.solve(inputArray); console.log(sortedArray); // 输出:[3, 9, 10, 27, 38, 43, 82]
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!