javascript - 为什么这个合并排序 java 脚本实现不起作用?

标签 javascript algorithm mergesort

<分区>

我试了一整天,似乎无法找出它不起作用的原因。我认为问题出在我的 JavaScript 语言技能上。我可能遗漏了一些关于参数传递的概念。你能告诉我错误在哪里吗?

这是我的实现,基于我一年前用 C# 编写的另一个实现,可以找到 here .

下面是代码(您可以直接在 Chrome 控制台上尝试,只需复制/粘贴即可“运行”):

function merge(A, p, q, r){
    var n1 = q - p + 1;
    var n2 = r - q;

    var i = 0;
    var j = 0;

    var L = [];
    while (i < n1){
        L.push(A[p + i++]);
    }

    var R = [];
    while(j < n2){
        R.push(A[q + j++ + 1]);
    }

    L.push(Number.MAX_VALUE);
    R.push(Number.MAX_VALUE);

    i = 0; 
    j = 0; 

    var k = p;
    while(k <= r){
        if(L[i] <= R[i]){
            A[k] = L[i];
            i = i + 1;
        }else{
            A[k] = R[j];
            j = j + 1;
        }

        k = k + 1;
    }
}

function mergeSort(A, p, r){
    console.log(A);

    if(p < r){
        var q = Math.floor((p + r) / 2);

        mergeSort(A, p, q); 
        mergeSort(A, q + 1, r);
        merge(A, p, q, r);
    }
}

function testMergeSort(array){
    var p = 0;
    var r = array.length - 1;

    console.log("BEFORE: " + array);

    mergeSort(array, p, r);

    console.log("AFTER: " + array);
    console.log("---------------------------------");
}

testMergeSort([5, 2, 4, 7, 1, 3, 2, 6]);

最佳答案

一个简单的错字:

if(L[i] <= R[i]){

应该是

if(L[i] <= R[j]){

关于javascript - 为什么这个合并排序 java 脚本实现不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11622411/

相关文章:

javascript - JS 处理用 Angular 捕获所有页面中的所有错误

javascript - 如何在另一个对象的被调用函数中获取调用者引用?

algorithm - 维奥拉-琼斯算法 - "Sum of Pixels"?

python - `n` 何时匹配 `n^2` 的最后一位?

scheme - 合并排序输出 - 方案

algorithm - 使用 K 方式合并合并 N 个排序的文件

javascript - 如何动态使用 jQuery 切换方法?

javascript - 使用 onclick 翻转 div

c++ - 在 C++ 中实现查找和替换过程

algorithm - 归并与插入排序的实证分析——难点