首页 > 编程语言 > 详细

两个有序数组,组合成一个有序数组,时间复杂度O(n)

时间:2020-06-05 15:45:41      阅读:67      评论:0      收藏:0      [点我收藏+]
 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       }

 

两个有序数组,组合成一个有序数组,时间复杂度O(n)

原文:https://www.cnblogs.com/kirkor-sort/p/13049651.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!