排序两个已经排好序的数组(JS)

题目:排序两个已经排好序的数组。

由于此题中并没有说明,两个数组是否都是升序或是降序,因此需要在数组合并的时候进行重新排序(这里我结果默认是升序排列)。

这里介绍两种方法,第二种方法在题目的原本的要求中加入了去重操作,两个数组中很可能存在着这重复的元素,如果不进行去重操作的话,简简单用数组组合起来利用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>

后续待更新!

Guess you like

Origin blog.csdn.net/dream_start_at_2017/article/details/121718478