Javascript,合并两个排序数组:有人能告诉我为什么这不是';你不能给出正确的排序吗?
我尝试合并两个数组,但得到的输出是[0,3,3,4,4]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
功能合并(arr1、arr2){
var i=0;
var j=0;
var arr3=[];
如果(arr1==未定义| | arr1.length==0){
返回arr2;
}
if(arr2==未定义| | arr2.length==0){
返回arr1;
}
而(i log(mergestoredarray([0,3,4,31],[3,4,6,30])在while条件下,当i或j索引达到相应数组的长度时,代码>将完成返回较低长度数组的循环。在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;
}
而(i log(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;
}
而(i log(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);