1. 程式人生 > >前端開發經典面試題之一:將2個有序陣列排序

前端開發經典面試題之一:將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 ],結果符合預期。