题目:排序两个已经排好序的数组。
由于此题中并没有说明,两个数组是否都是升序或是降序,因此需要在数组合并的时候进行重新排序(这里我结果默认是升序排列)。
这里介绍两种方法,第二种方法在题目的原本的要求中加入了去重操作,两个数组中很可能存在着这重复的元素,如果不进行去重操作的话,简简单用数组组合起来利用sort()进行重新排序即可,这就是第一种方式。
第一种方式比较直白,直接上代码啦:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>排序</title>
</head>
<body>
<script>
let arr1 = [2, 3, 5, 8, 9];
let arr2 = [10, 7, 4, 2];
let arr3 = [...arr1, ...arr2].sort((a, b) => {
return a - b;
});
console.log(arr3);
</script>
</body>
</html>
第二种解题思路:
去重操作的重点是两个数组中的成员判断是否相等,如果相等的话,只需要保留一个成员就行,那比较的话,自然会想到这里可以用双层循环来解决,目前只想到这种解决方案,因为循环的嵌套必然是的算法的的效率会降低,若数据多了,则可能运行时间就会很长,后期若想到其他方式会更新高效率的代码。另外不知道两个数组是否是同样的升序还是降序,在循环前需要提前对数组进行排序操作,保证两组数组的成员是同样的排序。
暂时附上此代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>排序</title>
</head>
<body>
<script>
let arr1 = [2, 3, 5, 8, 9];
let arr2 = [10, 7, 4, 2];
if (arr1[0] > arr1[arr1.length - 1]) {
// 降序,然后给他转成升序
arr1.sort(function (a, b) {
return a - b;
});
}
if (arr2[0] > arr1[arr2.length - 1]) {
// 降序,然后给他转成升序
arr2.sort(function (a, b) {
return a - b;
});
}
// console.log(arr1);
// console.log(arr2);
for (let i = 0; i < arr1.length; i++) {
for (let j = 0; j < arr2.length; j++) {
if (arr1[i] == arr2[j]) {
break;
}
else if (arr1[i] < arr2[j]) {
arr2.length += 1;
for (let k = arr2.length - 1; k >= j; k--) {
//console.log(k);
arr2[k] = arr2[k - 1];
}
arr2[j] = arr1[i];
}
else {
if (arr2[j + 1] > arr1[i]) {
arr2.length += 1;
for (let k = arr2.length - 1; k >= j + 1; k--) {
arr2[k] = arr2[k - 1];
}
arr2[j + 1] = arr1[i];
break;
}
}
}
}
// arr2.length += 1;
// console.log(arr2.length);
console.log(arr2);
</script>
</body>
</html>
后续待更新!