• [数据结构]查找


    查找概念

    查找表:由同一类型的数据元素构成的集合。

    查找表按照操作的方式分为两大种:静态查找表和动态查找表。

    静态查找表:只作查找操作的查找表,它的主要的操作有:

    查找某个“特定的数据元素”

    动态查找表:在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已经存在的某个数据元素。动态查找表的操作:

    查找时插入数据和查找时删除数据

    对于静态查找表来说,可以应用线性表结构来组织数据,这样可以使用顺序查找算法。如果再对主关键字排序,则可以应用折半查找等技术进行高效的查找。

    对于动态查找,则要考虑二叉排序树的查找技术。

    静态表查找

    顺序表查找

    顺序查找:从表中的第一个(或最后一个)记录开始,逐个进行记录的关键字和给定值比较,如果某个记录的关键字和给定值相等,则查找成功。如果直到最后一个(或第一个)记录,其关键字和给定值比较都不相等,则查找不成功。

    int Sequential_Search(int *a, int n, int key)
    {
    	int i;
    	for(i = 1; i <= n; i++)
    	{
    		if(a[i] == key)
    		{
    			return i;
    		}
    	}//for
    	
    	return 0;
    }
    

    但是这个算法是可以改进的,上面看到每向后移动一个元素后,都要比较当前的索引和数组的个数,防止越界。事实上,可以设置一个哨兵,这样就不需要每次让i与n作比较了。

    /*有哨兵的顺序查找,查找成功返回下标,不成功返回0*/
    int Sequential_Search2(int *a, int n, int key)
    {
    	int i = n;
    	a[0] = key;	//设置a[0]为关键字,称之为哨兵
    	
    	while(a[i] != key)
    	{
    		i--;
    	}
    	
    	return i;
    }
    

      这种在查找方向的尽头设置哨兵的方法,避免了在查找过程中每次比较后都要判断查找位置是否越界。在数据量较多时,效率提高很大,是非常好的编程技巧。

    折半查找

    有序表中,取中间记录作为比较对象,若给定值与中间记录相等,则查找成功。若给定值小于中间记录,则在中间记录的左半区继续查找;若给定值大于中间记录,则在右半区查找。

  • 相关阅读:
    js中FOR循环的陷阱
    Struts2学习第七课 result
    Struts2学习第七课 ActionSupport
    Struts2学习第六课 实现登录登出功能
    Struts2学习第五课 通过和ServletAPI耦合的方式获取WEB资源
    Struts2学习第四课 通过Aware接口获取WEB资源
    子类重写父类的方法
    字节流和字符流
    Java数据库连接库JDBC用到哪种设计模式?
    Java接口
  • 原文地址:https://www.cnblogs.com/stemon/p/4477528.html
Copyright © 2020-2023  润新知