javascript - 在 JavaScript 中实现归并排序算法

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

如有任何帮助,我们将不胜感激。

谢谢。

最佳答案

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

关于javascript - 在 JavaScript 中实现归并排序算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28141261/

相关文章:

javascript - 在编译的 javascript 中触发回调

java - 查找两个日期之间天数的算法

c - 如何在勒克斯和曝光值之间进行转换?

c++ - 如果一个数字小于 "Max"数组中的相应数字,如何将其添加到数组中?

java - 使用 Java 有效地将排序的 ArrayList 放入排序的数据结构中并找到小于 x 的数字数量

javascript - 无法使用 jQuery 将元素附加到 html

javascript - 检测DIV是否有滚动条

ios - Swift - 按子字符串排序数组

c++ - C++ 中的自定义 list.sort 比较

Javascript 函数参数通过引用