javascript数据结构及算法的检索算法
一:序列查找
顺序查找,从列表的第一个元素开始,判断列表元素逐一直到他们找到想要的结果,或直到最后没有找到他们想要的元素。
代码如下:
功能seqsearch(数据,ARR){
对于(var i = 0;i < arr.length;+ +我){
如果(ARR {我} = =数据){
返回true;
}
}
返回false;
}
我们还可以返回与元素位置相匹配的序列查找函数,代码如下所示:
功能seqsearch(数据,ARR){
对于(var i = 0;i < arr.length;+ +我){
如果(ARR {我} = =数据){
还我;
}
}
返回- 1;
}
二:找到最小值和最大值
求数组中最小值的算法如下:
1。将数组的第一个元素分配给一个变量,这是最小值。
2。开始遍历数组,并将第二个元素与当前最小值进行比较。
三.如果当前元素的值小于当前最小值,则将当前元素设置为新的最小值。
4。移动到下一个元素,重复步骤3。
5。当程序完成时,最小值存储在这个变量中。
代码如下:
功能findmin(ARR){
VaR最小= ARR { 0 };
对于(var i = 1;i < arr.length;+ +我){
如果(ARR {我} < min){
min = ARR {我};
}
}
返回min;
}
查找上面的最大和最小算法与数组中第一个元素的值相似,设置为最大值,然后在每个数组元素和最大剩余值上循环,如果当前元素的值大于当前值的最大值,则分配给最大值的元素值:
功能findmax(ARR){
VaR最大= ARR { 0 };
对于(var i = 1;i < arr.length;+ +我){
如果(ARR {我} >最大){
马克斯= ARR {我};
}
}
返回最大值;
}
三:两点查找法。
如果你所寻找的数据是有序的,双点查找算法比顺序搜索算法更有效:
1。将数组的第一个位置设置为下边界(0)。
2。将数组的最后一个元素的位置设置为上边界(数组的长度减少1)。
三.如果下边界等于或小于上边界,则执行以下操作:
将中间点设为(上边界加下边界)2。
如果中间点元素小于查询的值,则下边界设置为中间点元素加1的下标。
如果中点元素大于查询值,则上部边界设置为减号1。中点元素。
否则中间点元素是要查找并返回的数据。
代码如下:
两种搜索算法
功能折半查找(数据,ARR){
VaR下界= 0;
arr.length VaR上限= 1;
而(下界上界){
VaR中= math.floor((上限+下限)/ 2);
如果(ARR {中} <数据){
下界=中+ 1;
} else if(ARR {中} >数据){
上限=中1;
{ }人
回中;
}
}
返回- 1;
}
快速排序
函数qsort(列表){
如果(list.length = = 0){
返回{ };
}
存储小于该值的引用值。
var左};
存储大于引用值
var;
var =列表{ 0 };
对于(var i = 1;i < list.length;i++){
如果(列表{ } <枢轴){
Left.push(表{我});
{ }人
Right.push(表{我})
}
}
返回qsort(左),Concat(枢,qsort(右));
}
/ /测试代码
风险值= { 0,9,1,8,7,6,2,3,5,4 };
var list = qsort(数字);
console.log(折半查找(6,表));
四:计算重复次数;
当两个点查找,折半查找()函数找到一个值,如果有其他相同的值出现在数据集,那么函数将位于相似的价值。换句话说,其他相同的值可能出现在已找到的值的左边或右边。
然后,我们最简单的解决方案是同时编写2个循环,遍历数据集到左边,然后在统计数据上迭代,然后重复或向右:
重复数计算
函数(数据,ARR){
var计数= 0;
VaR方法= { };
VaR的位置=折半查找(数据,ARR);
如果(位置> 1){
+计数;
Arrs.push({指标:计数});
对于(var i =位置1;i 0;;i){
如果(ARR {我} = =数据){
+计数;
Arrs.push({指标:计数});
{ }人
打破;
}
}
对于(var i =位置+ 1;i < arr.length;+ +我){
如果(ARR {我} = =数据){
+计数;
Arrs.push({指标:计数});
{ }人
打破;
}
}
}
回归方法;
}
测试重复码
var arr = { 0,1,1,1,2,3,4,5,6,7,8,9 };
VaR方法=数(1,ARR);
console.log(ARRS);
console.log(ARRS。长度);
如下图所示: