Isu isihan gabung dalam kod JavaScript: Tidak dapat menyelesaikan ralat walaupun penyahpepijatan
P粉256487077
2023-08-18 14:25:39
<p>Saya cuba memahami semua algoritma pengisihan, ini adalah kod yang saya tulis untuk pengisihan gabungan tetapi ia tidak berfungsi, bolehkah anda tunjukkan apa yang salah di dalamnya: </p>
<pre class="brush:php;toolbar:false;">solve: function (A) {
biarkan kira = this.mergeSort(A);
kiraan pulangan;
},
mergeTwoSortedArrays: fungsi (A, B) {
biarkan i = 0;
biarkan j = 0;
biarkan k = 0;
biarkan C = [];
manakala (i < A.panjang && j < B.panjang && A[i] || B[j]) {
jika (A[i] < B[j]) {
C[k] = A[i];
i++;
k++;
}
lain {
C[k] = B[j];
j++;
k++;
}
}
manakala (j < B. panjang) {
C[k] = B[j];
k++;
j++;
}
manakala (i < A.panjang) {
C[k] = A[i];
k++;
i++;
}
pulangkan C;
},
mergeSort: fungsi (a) {
biarkan n = a.panjang;
jika (n <= 1) kembalikan a;
biarkan c = Array.from({ length: Math.floor(n / 2) }, (_, i) => a[i]);
let d = Array.from({ length: n - c.length }, (_, i) => a[c.length + i]);
kembalikan this.mergeTwoSortedArrays(c, d);
}</pre>
<p>Baiklah, soalan itu memerlukan saya menambah butiran lanjut untuk mendapatkan kelulusan.
Jadi pendekatan saya ialah: bahagikan tatasusunan kepada dua bahagian yang sama sehingga ia menjadi tatasusunan satu elemen, kemudian gunakan teknik cantum untuk menggabungkan dua tatasusunan yang diisih. </p>
Anda hanya perlu menyemak i < A.panjang && j <
Ini ialah kod anda yang dikemas kini: