实现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 ],结果符合预期。