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

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

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]
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号