在JavaScript中实现合并排序算法

时间:2015-01-25 20:44:21

标签: javascript algorithm sorting merge mergesort

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

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

这是我的功能:

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;
}

任何帮助将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:1)

只需将i + 1替换为i,将j + 1替换为所有while循环中的j&#39;条件,它将正常工作。目前,ab的最后一个元素被忽略,因为它们的索引分别为a.length - 1b.length - 1