1 const addSort = function (arr1, arr2) { 2 // 创建一个新的数组,存放结果 3 var newArr = [] 4 // 设置arr1的当前索引 5 var i = 0 6 // 设置arr2的当前索引 7 var j = 0 8 // 获取arr1数组的长度 9 var arr1_length = arr1.length 10 // 获取arr2数组的长度 11 var arr2_length = arr2.length 12 // 用while,不用for,因为while可以使用条件判断退出循环,而for是遍历数组,不够灵活 13 // 当两数组当前的索引都不大于自身数组长度时,继续循环,否则退出循环 14 while(i < arr1_length && j < arr2_length){ 15 // 判断哪个值比较小,小的push到新数组当中 16 if(arr1[i] > arr2[j] ){ 17 newArr.push(arr2[j]) 18 // push完成后,需要对索引值+1 19 j++ 20 } else { 21 newArr.push(arr1[i]) 22 i++ 23 } 24 } 25 // 跳出循环,此时,其中一个数组已经全部加入到新数组当中,而另一个数组还剩尾巴没有加入 26 // 同时,另一个数组的尾巴全部都大于别人,并且也都是有序的 27 // 判断是arr1全部加入了还是arr2全部加入了 28 if(i >= arr1_length){ 29 // 如果是arr1全部加入了,则把arr2的尾巴加入到新数组当中,尾巴从索引j开始,直到arr2.length-1 30 for(let key = j; key < arr2_length; key++){ 31 newArr.push(arr2[key]) 32 } 33 } else { 34 // 如果是arr2全部加入了,则把arr1的尾巴加入到新数组当中,尾巴从索引i开始,直到arr1.length-1 35 for(let key = i; key < arr1_length; key++){ 36 newArr.push(arr1[key]) 37 } 38 } 39 // console.log(newArr) 40 // 把新数组返回出去 41 return newArr 42 }
原文:https://www.cnblogs.com/kirkor-sort/p/13049651.html