Javascript,合并两个排序数组 : Can someone please tell me why this isn't giving the correct mergeSort?

标签 javascript arrays mergesort

我已经尝试合并这两个数组,但我得到的输出是 [0, 3, 3, 4, 4 ]

function mergeSortedArrays(arr1, arr2) {
  var i = 0;
  var j = 0;
  var arr3 = [];

  if (arr1 === undefined || arr1.length == 0) {
    return arr2;
  }

  if (arr2 === undefined || arr2.length == 0) {
    return arr1;
  }

  while (i < arr1.length - 1 && j < arr2.length - 1) {
    if (arr1[i] < arr2[j]) {
      arr3.push(arr1[i]);
      i++;
    } else {
      arr3.push(arr2[j]);
      j++;
    }
  }
  return arr3;
}

console.log(mergeSortedArrays([0, 3, 4, 31], [3, 4, 6, 30]));

对于这个例子,我知道我没有考虑数组大小不同的情况,但那是为了以后的问题。该代码目前甚至不适用于基本情况。它不会一直迭代并在中途中断。有人可以解决这个问题吗?我已经解决了 while 循环,但代码仍然无法正常工作。

最佳答案

你犯了两个错误。

  • while 循环条件检查数组的 length 不是 length - 1。这不会添加两个数组的最后一个元素。
  • 当数组之一由于 && 而完全循环时,您的 while 循环将结束。所以在 while 添加其他数组的剩余元素之后。

function mergeSortedArrays(arr1, arr2) {
  var i = 0;
  var j = 0;
  var arr3 = [];

  if (arr1 === undefined || arr1.length == 0) {
    return arr2;
  }

  if (arr2 === undefined || arr2.length == 0) {
    return arr1;
  }

  while (i < arr1.length && j < arr2.length) {
    if (arr1[i] < arr2[j]) {
      arr3.push(arr1[i]);
      i++;
    } else {
      arr3.push(arr2[j]);
      j++;
    }
    
  }
  if(i === arr1.length){
      return arr3.concat(arr2.slice(j))
    }
    else if(j === arr2.length){
      return arr3.concat(arr1.slice(i))
    }
}

console.log(mergeSortedArrays([0, 3, 4, 31], [3, 4, 6, 30]));

关于Javascript,合并两个排序数组 : Can someone please tell me why this isn't giving the correct mergeSort?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58006436/

相关文章:

javascript - 如何检索选择框中所选选项的从零开始的索引?

javascript - 如何构建 mobx

javascript - 使用数组上的 observable api 更新更改后,JsViews 不会删除脚本标签

java - 归并排序通用方法

Haskell 归并排序

C++ - 使用 <list> 模板时得到 'error C2064'

javascript - 无限滚动 ionic 框架:Loadmore() called multiple times

javascript - 更改 Canvas 大小时保留 svg 组的大小

javascript - 如何设置 slice();push();splice() 方法的限制?

c# - 如何创建二维动态长度数组?