• 查找之一 , 顺序查找


    在写顺序查找之前呢,先介绍几个概念:

    1、 查找表 :相同类型的数据元素组成的集合。

    2、 关键字: 数据元素中能够唯一标示数据元素的项(一项或多项)。

    3、 查找   :  根据给定的key(关键字)值,查找某一数据元素,如果存在满足条件的数据元素则查找成功,否则查找失败。如果查找成功,一般返回该数据元素所在的位置。

    4、 静态查找: 查找时只对数据元素进行查询或检索。

    5、动态查找:查找过程中,删除已经存在的数据元素,或者插入不存在的数据元素。

    6、三种查找方法:顺序表和链表查找 、 散列表查找、索引查找表查找。

    顺序表和链表查找:根据key逐一和表中的元素进行比较。

    散列表查找: 根据给定的key值直接访问表中的数据元素。

    索引查找表查找:先查找数据元素所在的块,再到快中查找数据元素。


    相关概念就介绍到这里,下面重点看看顺序表和链表查找方法:

    对于给定的数据元素集合 R , 查找 key,逐一对表中元素进行比较,知道查找到key , 或者表结束,例如,对于顺序表R = 

    20 38 4 2 78 99 24 1 10 9


    查找 key = 2 , 分别和20、38、4、2 相比较 , 表中存在该元素 , 返回该元素在表中的位置位置4.

    查找 key = 22 , 分别和 20、38、4、2、78、99、24、1、10、9 比较都没有相等的元素,返回 -1 。

    下面是顺序表查找的Java实现版:

    public class SeqSearch {
    
    	public static int []  DATA_COLLECTION = { 20,38,4,2,78,99,24,1,10,9};
    	public static int  seqSearch(int[] src , int key){
    		if(src == null || src.length == 0)
    		return -1;
    		for(int i = 0 ; i < src.length ; i++){
    			if(src[i] == key){
    				return i ;
    			}
    		}
    		return -1;
    	}
    	public static void main(String[] args) {
    		System.out.println("search key 2 :"+seqSearch(DATA_COLLECTION,2));
    		System.out.println("search key 22 :"+seqSearch(DATA_COLLECTION,22));
    	}
    
    }


    关于顺序查找的算法分析:假设对每一个查找元素查找到的概率相等是P= 1/n,因为对每一个成功查找到元素的比较次数是 n -i +1( i 为查找到元素所在的位置) 。 那么,平均查找长度ASL=a1 * p1 + a2 * p2  ... ... + an * pn = 1/n(1+2+3 + ...... + n) = (n+1)/2 。

    所以该算法的时间复杂度为O(N) , N 为表的长度 。


    顺序查找方法就学到这里,下一篇  ——  二分查找。


  • 相关阅读:
    [转]Amazon DynamoDB – a Fast and Scalable NoSQL Database Service Designed for Internet Scale Applications
    [转]CIDR简介
    [转]Amazon AWS亚马逊云服务免费一年VPS主机成功申请和使用方法
    [转]SQL Server 连接串关键字别名
    [转]各种符号的英文单词
    【解决】SharePoint 2013 当鼠标悬停在用户名称上时页面会崩溃
    【HOW】如何限制Reporting Services报表导出功能中格式选项
    【解决】“不能手工移动或复制项到放置库”
    【解决】SharePoint 2013 with SP1安装问题及解决
    [转]安装SharePoint 2013时安装AppFabric失败(错误码:1603)
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3509038.html
Copyright © 2020-2023  润新知