zoukankan      html  css  js  c++  java
  • js:数据结构笔记13--检索算法

    顺序查找:也称线性查找,暴力查找的一种

    • 基本格式:
    var nums = [];
    for(var i = 0; i < 10; ++i) {
        nums[i] = Math.floor(Math.random() * 101);
    }
    
    function seqSearch(arr,data) {
        for(var i = 0; i < arr.length; ++i) {
            if(arr[i] === data) {
                return i;
            }
        }
        return -1;
    }
    seqSearch(nums,45);
    View Code

     //效率比Array.indexof()低;

    • 查找最值:
    function findMin(arr) {
        var min = arr[0];
        for(var i = 1; i < arr.length; ++i) {      //这里从第二个开始查找
            if(arr[i] < min) {                //arr[i] > max
                min = arr[i];
            }
        }
        return min;
    }
    View Code
    • 自组织数据:经过多次查找之后,查找最频繁的元素会从原来的位置移动到数据集的起始位置
    var nums = [0,45,101,12,5,12,78,45,5];
    
    function seqSearch(arr,data) {
    	for(var i = 0; i < arr.length; ++i) {
    		if(arr[i] === data) {
    			if( i > 0) {
    				swap(arr,i,i-1);   //swap(arr,i,0);
    				//console.log(arr);
    			}
    			return true;
    		}
    	}
    	return false;
    }
    
    function swap(arr,index,index1) {
    	temp = arr[index];
    	arr[index] = arr[index1];
    	arr[index1] = temp;
    }
    
    for(var i = 0; i < 4; ++i) {
    	seqSearch(nums,5);
    }

    -----------------------------

    [0, 45, 101, 5, 12, 12, 78, 45, 5] 
    [0, 45, 5, 101, 12, 12, 78, 45, 5] 
    [0, 5, 45, 101, 12, 12, 78, 45, 5] 
    [5, 0, 45, 101, 12, 12, 78, 45, 5]

    二分查找:如果数据是有序的,二分查找比顺序查找算法更高效;

    var nums = [0,5,46,85,102,212,503];  //必须先排序好
    
    function binSearch(arr,data) {
    	var upperBound = arr.length - 1;
    	    lowerBound = 0;
    	while(lowerBound <= upperBound) {
    		var mid = Math.floor((upperBound + lowerBound) / 2);
    		if(arr[mid] < data) {
    			lowerBound = mid + 1;
    		} else if(arr[mid] > data) {
    			upperBound = mid - 1;
    		} else {
    			return mid;
    		}
    	}
    	return -1;
    }
    
    console.log(binSearch(nums,46));
    
    • 计算次数:
    function count(arr,data) {
    	var count = 0,
    		position = binSearch(arr,data);
    		if(position > -1) {
    			++count;
    			for(var i = position-1; i > 0; --i) {
    				if(arr[i] === data) {
    					++count;
    				} else {
    					break;
    				}
    			}
    			for(var i = position + 1; i < arr.length; ++i) {
    				if(arr[i] === data) {
    					++count;
    				} else {
    					break;
    				}
    			}
    		}
    		return count;
    }
    
    console.log(count(nums,5));
    

      

  • 相关阅读:
    grep在一个特定的文件搜索文件夹keyword
    Mysql HA
    通过wmi获取本地硬件信息的一些疑问。
    nginx+tomcat 架构 HttpServletRequest.getScheme()获取正确的协议
    mybatis配置log4j控制台打印SQL语句
    mybatis使用${}拼接sql出错??
    【MySQL】JDBC连接MySQL的一些问题以及解决办法
    mybatis 嵌套查询子查询column传多个参数描述
    关于一些对location认识的误区
    Nginx+lua学习
  • 原文地址:https://www.cnblogs.com/jinkspeng/p/4049826.html
Copyright © 2011-2022 走看看