JavaScript代码中的合并排序问题:尽管经过调试,仍无法解决错误
P粉256487077
P粉256487077 2023-08-18 14:25:39
0
1
524

我正在尝试理解所有的排序算法,这是我为归并排序编写的代码,但它不起作用,你能指出其中的错误吗:

solve: function (A) { let count = this.mergeSort(A); return count; }, mergeTwoSortedArrays: function (A, B) { let i = 0; let j = 0; let k = 0; let C = []; while (i < A.length && j < B.length && A[i] || B[j]) { 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; }, mergeSort: 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(c, d); }

好吧,问题要求我添加更多细节才能通过审批。 所以我的方法是:将数组分成两个相等的部分,直到它们变成一个元素的数组,然后使用合并技术将两个排序好的数组合并。

P粉256487077
P粉256487077

全部回复 (1)
P粉068510991

你应该简单地将 i < A.length && j < B.length 作为循环条件进行检查。

这是你更新后的代码:

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]
    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责声明 Sitemap
    PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!