3种归并操作js代码
/**良哥的*/ function merge(a, b) { var aLen = a.length, bLen = b.length, maxLen = Math.max(aLen, bLen), sumLen = aLen + bLen, result = [], ap = 0, bp = 0; while (result.length < sumLen) { if (ap < aLen && bp < bLen) { if(a[ap] > b[bp]){ result.push(b[bp++]); } else { result.push(a[ap++]); } } else if (!(ap < aLen)){ while(bp < bLen){ result.push(b[bp++]); } } else if (!(bp < bLen)){ while(ap < aLen){ result.push(a[ap++]); } } } return result; }
/**鲁军*/ function merge(arr1, arr2){ var i = 0; var j = 0; var c = 0; var k; var len1 = arr1.length; var len2 = arr2.length; var arr = []; for(;i<len1 && j<len2;){ if( arr1[i] > arr2[j] ){ arr.push( arr2[j] ); j++; }else{ arr.push( arr1[i] ); i++; } //if(i==len1 || j==len2){ // break; //} } if(i==len1){ //arr = arr.concat(arr2.slice(j)); for(k=j; k<len2; k++){ arr.push( arr2[k] ); } } if(j==len2){ //arr = arr.concat(arr1.slice(i)) for(k=i; k<len1; k++){ arr.push( arr1[k] ); } } return arr; }
/*金锐的*/ function merge(a,b){ var x = 0; var l = 0; var list = []; var aLen = a.length; var bLen = b.length; for(var i = 0; i < bLen; i++){ for(var j = x; j < aLen; j++){ if(b[i] < a[j]){ list.push(b[i]); l = i; break; }else{ list.push(a[j]); x++; } } } if(x == a.length){ for(var y = l; y < bLen; y++){ list.push(b[y]); } }else{ for(var z = x; z < aLen; z++){ list.push(a[z]); } } return list; }
经过测试2个有序20W长度的数组归并耗时都在15毫秒以下。
以下有几条经验(在大量操作的时候才能体现,平时不需要做这样的优化。代码可读性还是第一原则)
1:数组的concat方法比直接for循环push要慢。
2:for循环比while循环快。
3:var a = b || 3; //这种操作很消耗时间
4: break,continue 在已确定不需要再循环时很耗时。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?