前端开发经典面试题之一:将2个有序数组排序

实现2个有序数组的排序

比如将如下两个有序数组
[1, 3, 5, 7, 9, 12, 15, 18] 和 [2, 8, 11, 16, 19] 排序后,我们希望得到新数组[ 1, 2, 3, 5, 7, 8, 9, 11, 12, 15, 16, 18, 19 ]。可通过以下两种方法实现。

方法一思路:把两个数组合并起来再排序

function concatArr(data1, data2) {
  var arr = [];
  var newArr = arr.concat(data1, data2).sort(function(a, b) {
    return a - b;
  });
  return newArr;
}

方法二思路:新建一个空数组temp,数组长度表示为t,以及两个变量i, j标记两组数据当前比较值的下标进行对比,将比较小的值存入temp数组中,同时将下标和数值长度自增1。

function sortFun(data1, data2) {
  var temp = [],
    t = 0,
    i = 0,
    j = 0;
  while (i < data1.length && j < data2.length) {
    if (data1[i] < data2[j]) {
      temp[t++] = data1[i++]; //data1[i]添加到temp中并让t和i自增1
    } else {
      temp[t++] = data2[j++]; //data2[j]添加到temp中并让t和j自增1
    }
  }
  while (i < data1.length) { //data1中剩余的数组添加到temp中
    temp[t++] = data1[i++];
  }
  while (j < data2.length) {  //data2中剩余的数组添加到temp中
    temp[t++] = data2[j++];
  }
  return temp; //返回排完序的新数组
}

测试代码:

var data1 = [1, 3, 5, 7, 9, 12, 15, 18];
var data2 = [2, 8, 11, 16, 19];
console.log(concatArr(data1, data2));
console.log(sortFun(data1, data2));
以上都正确打印出 [ 1, 2, 3, 5, 7, 8, 9, 11, 12, 15, 16, 18, 19 ],结果符合预期。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI小美好

感恩打赏让我坚定努力的方向

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值