【问题标题】:Implementing merge sort algorithm in JavaScript在 JavaScript 中实现归并排序算法
【发布时间】:2015-03-24 08:13:59
【问题描述】:

我正在尝试在 JavaScript 中实现合并排序算法。但是在合并两个排序数组时,我遇到了一个奇怪的行为。

当我将这两个数组:[1,4, 5] 和 [3, 6, 7, 10] 传递给合并函数时,我总是得到这个结果:[ 1, 3, 4, 6, 7 ]。奇怪的是没有元素 5 和 10 !

这是我的功能:

function merge(a, b)
{
    var result = [],
        k = 0,
        i = 0,
        j = 0;

    while(a.length > i+1 && b.length > j+1){
        if(a[i] <= b[j]){
            result[k++] = a[i++];
        } else {
            result[k++] = b[j++];
        }
    }

    while(a.length > i+1) {
        result[k++] = a[i++];
    }

    while(b.length > j+1) {
        result[k++] = b[j++];
    }

    return result;
}

任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • 带上调试器调试一下。提示:a.length &gt; i+1 表达式是什么意思?

标签: javascript algorithm sorting merge mergesort


【解决方案1】:

只需在所有while循环的条件下将i + 1替换为i和j + 1替换为j,它就会正常工作。目前a 和b 的最后一个元素只是被忽略了,因为它们的索引分别是a.length - 1 和b.length - 1。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多