Isu isihan gabung dalam kod JavaScript: Tidak dapat menyelesaikan ralat walaupun penyahpepijatan
P粉256487077
P粉256487077 2023-08-18 14:25:39
0
1
526

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.

P粉256487077
P粉256487077

membalas semua (1)
P粉068510991

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]
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!