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:
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); } 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.
Anda hanya perlu menyemak i < A.panjang && j <
Ini ialah kod anda yang dikemas kini:
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]