数码资讯
JS有序数组的连接问题
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
1。前言
我昨天遇到的一个很常见的问题是如何解决一个有序数组,但是我们必须考虑到代码的效率,因为要连接的数组是有序的,这是非常重要的先决条件。
2。简单但低效的算法
我首先想到的是使用内置的连接方法,然后解决它。此方法没有考虑到数组是有序的。
复制代码代码如下所示:
功能concatsort(ARRA、ARRB){
返回arra.concat(ARRB)Sort();
}
为了准确理解什么是排序的排序算法的使用,具体看V8引擎算法(链接),这是当数组的长度较短(insertionsort)使用插入排序,当长度的数组不再使用快速序列(Quicksort)。纠正自己的长时间的误解,总认为那种用泡沫。
三.插入小值的方法
也有人认为:对两个数组的遍历,设置两个标记(I,J)是用来记录位置的遍历将在两个数组中的值为一个新的数组是较小的,然后签订移动位置,反复比较,直到搜索值插入到数组。做第一次的错误判断,所以是一个死循环,使算法的能力仍然很弱。
复制代码代码如下所示:
功能控制(ARRA、ARRB){
var i,j,k,莱娜= arra.length,lenb = arrb.length,艾伦=莱娜+ lenb,结果= { };
为(i = 0,J = 0,k = 0;K<艾伦;K+){
如果(我= lenb){ ARRA {我} | | < ARRB { }){J}.
result.push(ARRA {我+ });
其他{ }
result.push(ARRB { J++ });
}
}
返回结果;
}
var a = { 1,2,4 },B = { 3,5,6,7,10 };
console.log(Con(A,B)); / / { 1,2,3,4,5,6,7,10 }
该算法与上述方法1 jsperf算法的性能,发现第二算法的效率明显优于第一种。如果你不相信它,打了它在这里。
4。问题升级:增加组合数组的数目
如果数组的数量增加;如= { 1.5 },B = {二},{ K. } C = 3,4的…..=…
当被问及这个问题时,第一感觉与合并算法非常相似,但再次合并算法不适用于数组排序的前提,然后考虑堆排序、快速排序等算法。发现使用数组排序的前提条件并不是很有效,最后选择放弃。在面试之后,仍然没有办法思考,很长时间我都不知道如何有效地解决这个问题。回到宿舍的时候,他对宴会说,话惊醒了我,代码如下:
复制代码代码如下所示:
Function conMore () {
无功outerarr = { },我arguments.length len =结果= { };
对于(i = 0;i;;i;+;+){
OuterArr.push(参数{我});
}
如果(result.length = 0){
结果:outerarr { 0 };
}
对于(i = 1;i;;i;+;+){
结果= CON(结果,outerarr {我});
}
返回结果;
}
功能控制(ARRA、ARRB){
var i,j,k,莱娜= arra.length,lenb = arrb.length,艾伦=莱娜+ lenb,结果= { };
为(i = 0,J = 0,k = 0;K<艾伦;K+){
如果(我= lenb){ ARRA {我} | | < ARRB { }){J}.
result.push(ARRA {我+ });
其他{ }
result.push(ARRB { J++ });
}
}
返回结果;
}
var a = {第1、4、7 },B = {待},C = { 3,6,9,10 };
console.log(conmore(A,B,C)); / / { 1,2,3,4,5,6,7,8,9,10 }
Again, use jsperf to test and analyze the performance of the code, and hit here with the results.
我昨天遇到的一个很常见的问题是如何解决一个有序数组,但是我们必须考虑到代码的效率,因为要连接的数组是有序的,这是非常重要的先决条件。
2。简单但低效的算法
我首先想到的是使用内置的连接方法,然后解决它。此方法没有考虑到数组是有序的。
复制代码代码如下所示:
功能concatsort(ARRA、ARRB){
返回arra.concat(ARRB)Sort();
}
为了准确理解什么是排序的排序算法的使用,具体看V8引擎算法(链接),这是当数组的长度较短(insertionsort)使用插入排序,当长度的数组不再使用快速序列(Quicksort)。纠正自己的长时间的误解,总认为那种用泡沫。
三.插入小值的方法
也有人认为:对两个数组的遍历,设置两个标记(I,J)是用来记录位置的遍历将在两个数组中的值为一个新的数组是较小的,然后签订移动位置,反复比较,直到搜索值插入到数组。做第一次的错误判断,所以是一个死循环,使算法的能力仍然很弱。
复制代码代码如下所示:
功能控制(ARRA、ARRB){
var i,j,k,莱娜= arra.length,lenb = arrb.length,艾伦=莱娜+ lenb,结果= { };
为(i = 0,J = 0,k = 0;K<艾伦;K+){
如果(我= lenb){ ARRA {我} | | < ARRB { }){J}.
result.push(ARRA {我+ });
其他{ }
result.push(ARRB { J++ });
}
}
返回结果;
}
var a = { 1,2,4 },B = { 3,5,6,7,10 };
console.log(Con(A,B)); / / { 1,2,3,4,5,6,7,10 }
该算法与上述方法1 jsperf算法的性能,发现第二算法的效率明显优于第一种。如果你不相信它,打了它在这里。
4。问题升级:增加组合数组的数目
如果数组的数量增加;如= { 1.5 },B = {二},{ K. } C = 3,4的…..=…
当被问及这个问题时,第一感觉与合并算法非常相似,但再次合并算法不适用于数组排序的前提,然后考虑堆排序、快速排序等算法。发现使用数组排序的前提条件并不是很有效,最后选择放弃。在面试之后,仍然没有办法思考,很长时间我都不知道如何有效地解决这个问题。回到宿舍的时候,他对宴会说,话惊醒了我,代码如下:
复制代码代码如下所示:
Function conMore () {
无功outerarr = { },我arguments.length len =结果= { };
对于(i = 0;i;;i;+;+){
OuterArr.push(参数{我});
}
如果(result.length = 0){
结果:outerarr { 0 };
}
对于(i = 1;i;;i;+;+){
结果= CON(结果,outerarr {我});
}
返回结果;
}
功能控制(ARRA、ARRB){
var i,j,k,莱娜= arra.length,lenb = arrb.length,艾伦=莱娜+ lenb,结果= { };
为(i = 0,J = 0,k = 0;K<艾伦;K+){
如果(我= lenb){ ARRA {我} | | < ARRB { }){J}.
result.push(ARRA {我+ });
其他{ }
result.push(ARRB { J++ });
}
}
返回结果;
}
var a = {第1、4、7 },B = {待},C = { 3,6,9,10 };
console.log(conmore(A,B,C)); / / { 1,2,3,4,5,6,7,8,9,10 }
Again, use jsperf to test and analyze the performance of the code, and hit here with the results.
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。