本文实例讲述了基于JavaScript实现的顺序查找算法。分享给大家供大家参考,具体如下:
对于查找数据来说,最简单的方法就是从列表的第一个元素开始对列表元素逐个进行判断,直到找到了想要的结果。这个方法叫做顺序查找,有时候也被叫做线性查找。它属于暴力查找技巧的一种。
顺序查找实现起来非常简单,代码如下:
数据,函数generalSearch (arr){//普通的顺序查找,就是遍历一遍看是否找到 我(var=0; i< arr.length;我+ +){ 如果(arr[我]==数据){ 返回true; } } 返回错误; } >之前那么这样会不会效率很低呢?对于未排序的数据集来说,当被查到的数据位于数据集的起始位置时,查找是最快,最成功的。通过将成功找到的元素置于数据集的起始位置,可以保证在以后的操作中元素能被更快的查找到,代码如下:
数据,函数这(arr){//自组织查找,将查找率高的依次往前移 我(var=0; i< arr.length;我+ +){ 如果(arr[我]==数据){ 如果(i> 0) { 交换(加勒比海盗,我张);//如果找到则将查找的值和前一个值交换位置 } 返回true; } } 返回错误; } 函数交换(arr, i, j){//交换位置 temp=arr[我]; arr[我]=arr [j]; arr [j]=temp; } >之前那有没有更加好的方法呢?在查找的世界中,有一个“80 - 20原则”,指的是对某一数据集执行的80%的查找操作都是对其中20%的数据元素进行查找,所以我们可以将查找到且处于后80%的元素放在起始位置,而前20%则不需要改变,代码如下:
数据,函数bestSearch (arr){//更好的自组织查找,将排名后80%的查找结果调到第一位 我(var=0; i< arr.length;我+ +){ 如果(arr[我]==data&, i> (arr.length * 0.2)){//如果是后80% 交换(加勒比海盗,我,0); 返回true; }else if (arr[我]==数据){ 返回true;//前20%就不移动了 } } 返回错误; } >之前三种查找的实验代码如下:
//进行试验 var num=(3、1、4、6、2、9日8 0,5、7];//普通查找 var bool=generalSearch (num 3); document . write (bool + & lt; br>);//真实的 var bool=generalSearch (num 11); document . write (bool + & lt; br>);//假的//自组织查找 showNums (num);//3 1 4 2 9 8 0 5 6 7 这(num 2); showNums (num);//3 1 4 2 6 9 8 0 5 7 这(num 2); showNums (num);//3 1 2 4 6 9 8 0 5 7 这(num 2); showNums (num);//4 3 2 1 9 8 0 5 6 7//更好的自组织查找 document . write(“更好的自组织查找& lt; br>”); bestSearch (num 5); showNums (num);//5 1 2 4 6 9 8 0 3 7 bestSearch (num 2); showNums (num);//5 1 2 4 6 9 8 0 3 7 >之前顺序查找的完整代码:
& lt; !DOCTYPE html> & lt; html> & lt; head> & lt;元charset=皍tf - 8”比; & lt; title> & lt;/title> & lt;/head> & lt; body> & lt;脚本type=" text/javascript祝辞 数据,函数generalSearch (arr){//普通的顺序查找,就是遍历一遍看是否找到 我(var=0; i< arr.length;我+ +){ 如果(arr[我]==数据){ 返回true; } } 返回错误; } 数据,函数这(arr){//自组织查找,将查找率高的依次往前移 我(var=0; i< arr.length;我+ +){ 如果(arr[我]==数据){ 如果(i> 0) { 交换(加勒比海盗,我张);//如果找到则将查找的值和前一个值交换位置 } 返回true; } } 返回错误; } 函数交换(arr, i, j){//交换位置 temp=arr[我]; arr[我]=arr [j]; arr [j]=temp; } 数据,函数bestSearch (arr){//更好的自组织查找,将排名后80%的查找结果调到第一位 我(var=0; i< arr.length;我+ +){ 如果(arr[我]==data&, i> (arr.length * 0.2)){//如果是后80% 交换(加勒比海盗,我,0); 返回true; }else if (arr[我]==数据){ 返回true;//前20%就不移动了 } } 返回错误; } 函数showNums (arr) { 我(var=0; i< arr.length;我+ +){ 文档。写(arr[我]+ '); } document . write (“& lt; br>”); }//进行试验 var num=(3、1、4、6、2、9日8 0,5、7];//普通查找 var bool=generalSearch (num 3); document . write (bool + & lt; br>);//真实的 var bool=generalSearch (num 11); document . write (bool + & lt; br>);//假的//自组织查找 showNums (num);//3 1 4 2 9 8 0 5 6 7 这(num 2); showNums (num);//3 1 4 2 6 9 8 0 5 7 这(num 2); showNums (num);//3 1 2 4 6 9 8 0 5 7 这(num 2); showNums (num);//4 3 2 1 9 8 0 5 6 7//更好的自组织查找 document . write(“更好的自组织查找& lt; br>”); bestSearch (num 5); showNums (num);//5 1 2 4 6 9 8 0 3 7 bestSearch (num 2); showNums (num);//5 1 2 4 6 9 8 0 3 7 & lt;/script> & lt;/body> & lt;/html>基于JavaScript实现的顺序查找算法示例