Javascript,合并两个排序数组:有人能告诉我为什么这不是';你不能给出正确的排序吗?

Javascript,合并两个排序数组:有人能告诉我为什么这不是';你不能给出正确的排序吗?,javascript,arrays,mergesort,Javascript,Arrays,Mergesort,我尝试合并两个数组,但得到的输出是[0,3,3,4,4] 功能合并(arr1、arr2){ var i=0; var j=0; var arr3=[]; 如果(arr1==未定义| | arr1.length==0){ 返回arr2; } if(arr2==未定义| | arr2.length==0){ 返回arr1; } 而(i

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

功能合并(arr1、arr2){
var i=0;
var j=0;
var arr3=[];
如果(arr1==未定义| | arr1.length==0){
返回arr2;
}
if(arr2==未定义| | arr2.length==0){
返回arr1;
}
而(ilog(mergestoredarray([0,3,4,31],[3,4,6,30])将完成返回较低长度数组的循环。

在while条件下,当i或j索引达到相应数组的长度时,代码>将完成返回较低长度数组的循环。

此操作:

function mergeTwoSortedArrays(arr1, arr2) {
  let merged = [];
  let index1 = 0;
  let index2 = 0;
  let current = 0;

  while (current < (arr1.length + arr2.length)) {

    let isArr1Depleted = index1 >= arr1.length;
    let isArr2Depleted = index2 >= arr2.length;

    if (!isArr1Depleted && (isArr2Depleted || (arr1[index1] < arr2[index2]))) {
      merged[current] = arr1[index1];
      index1++;
    } else {
      merged[current] = arr2[index2];
      index2++;
    }

    current++;
  }

  return merged;
}
功能合并两条分拣线(arr1、arr2){
让合并=[];
设index1=0;
设index2=0;
设电流=0;
而(电流<(arr1.length+arr2.length)){
设isarr1dpleted=index1>=arr1.length;
让isArr2Depleted=index2>=arr2.length;
如果(!isarr1dpleted&(isarr2dpleted | | |(arr1[index1]
有关更多信息:

此功能:

function mergeTwoSortedArrays(arr1, arr2) {
  let merged = [];
  let index1 = 0;
  let index2 = 0;
  let current = 0;

  while (current < (arr1.length + arr2.length)) {

    let isArr1Depleted = index1 >= arr1.length;
    let isArr2Depleted = index2 >= arr2.length;

    if (!isArr1Depleted && (isArr2Depleted || (arr1[index1] < arr2[index2]))) {
      merged[current] = arr1[index1];
      index1++;
    } else {
      merged[current] = arr2[index2];
      index2++;
    }

    current++;
  }

  return merged;
}
功能合并两条分拣线(arr1、arr2){
让合并=[];
设index1=0;
设index2=0;
设电流=0;
而(电流<(arr1.length+arr2.length)){
设isarr1dpleted=index1>=arr1.length;
让isArr2Depleted=index2>=arr2.length;
如果(!isarr1dpleted&(isarr2dpleted | | |(arr1[index1]

更多信息:

您犯了两个错误

  • while
    循环中,检查数组的
    长度
    ,而不是
    长度-1
    。这不会添加两个数组的最后元素
  • 由于
    和&
    的原因,当其中一个数组将完全循环时,while循环将结束。因此,在添加其他数组的剩余元素之后
功能合并(arr1、arr2){
var i=0;
var j=0;
var arr3=[];
如果(arr1==未定义| | arr1.length==0){
返回arr2;
}
if(arr2==未定义| | arr2.length==0){
返回arr1;
}
而(ilog(mergestoredarray([0,3,4,31],[3,4,6,30])您犯了两个错误

  • while
    循环中,检查数组的
    长度
    ,而不是
    长度-1
    。这不会添加两个数组的最后元素
  • 由于
    和&
    的原因,当其中一个数组将完全循环时,while循环将结束。因此,在添加其他数组的剩余元素之后
功能合并(arr1、arr2){
var i=0;
var j=0;
var arr3=[];
如果(arr1==未定义| | arr1.length==0){
返回arr2;
}
if(arr2==未定义| | arr2.length==0){
返回arr1;
}
而(ilog(mergestoredarray([0,3,4,31],[3,4,6,30])首先,循环需要迭代到arr1.lenght,arr2.lenght不需要迭代到lenght-1

while (i < arr1.length  && j < arr2.length )

希望有帮助。

首先,循环需要迭代到arr1.lenght,arr2.lenght不需要迭代到lenght-1

while (i < arr1.length  && j < arr2.length )

希望有帮助。

您的代码中缺少两件事:

  • while循环正在运行
    i
    arr1
    j
    arr2
    。这意味着它将运行到arr1和arr2的第三个索引。因此,最后一个索引将不会在循环中执行。因此,对于
    arr1
    您应该将循环重构为
    i
    ,对于
    arr2
    您应该重构为
    j

  • 接下来,您需要为剩余数组的剩余元素添加循环。这意味着当您执行代码时,一个循环的所有元素将被推入
    arr3
    中,然后另一个数组的一个元素将丢失,并且不会被推入
    arr3
    (对于两个数组的相同长度)和/或另一个数组的多个元素将丢失(对于两个数组的不同长度)。因此,您需要将另一个数组的其余元素推送到
    arr3

  • 我已经添加了您代码的重构代码

    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++;
            }
        }
        while (i < arr1.length) {
            arr3.push(arr1[i]);
            i++;
        }
        while (j < arr2.length) {
            arr3.push(arr2[j]);
            j++;
        }
        return arr3;
    }
    

    您的代码中缺少两件事:

  • while循环正在运行
    i
    arr1
    j
    arr2
    。这意味着它将运行到arr1和arr2的第三个索引。因此,最后一个索引将不会在循环中执行。因此,对于
    arr1
    您应该将循环重构为
    i
    ,对于
    arr2
    您应该重构为
    j

  • 接下来,您需要为剩余数组的剩余元素添加循环。那意味着
    const mergeSorted = (a1 = [], a2 = []) => [...a1, ...a2].sort((a, b) => a - b);