首页 > 编程语言 > 详细

[从今天开始修炼数据结构]查找算法概论和顺序表查找

时间:2019-12-29 11:47:42      阅读:63      评论:0      收藏:0      [点我收藏+]

一、查找概论

  查找的概念也没什么好说的,就介绍几个特殊概念

  主关键字:唯一标识一个记录的关键字,对比sql中的主键

  次关键字:可以识别多个数据元素的关键字,即并非一一对应的关键字

  静态查找表:只做查找,不做其他操作的表

  动态查找表:查找的同时,插入或删除数据的表

  好了下面进入正题

二、顺序表查找

  1,顺序表查找就是最基本的查找技术,从表中的第一个或最后一个元素开始,将表中的元素逐个与进行记录的关键字和给定值进行比较,若比较相同,则查找成功,若比较到尽头都不等,则查找失败

  代码实现:

    public static int equentialSearch(List list, Object obj){
        for (int i = 0; i < list.size(); i++){
            if (list.get(i).equals(obj)){
                return i;
            }
        }
        return -1;
    }

  查找复杂的表结构时,把你的List换成泛型,或者其他数据结构;写一个comparator或者comparable就可以了。

  2,顺序表查找优化

  每次查找都要对i是否越界进行判断,是件很麻烦的事。我们用更好的方法,设置一个哨兵。实现如下

    public static int enquentialSearch2(List list, Object obj){
        list.set(0, obj);
        int index = list.size();
        while (!list.get(index).equals(obj)){
            index--;
        }
        return index;
    }

  设置了list的0元素作为哨兵。

  3,算法分析

  顺序查找最好的情况,就是一开始就找到了目标元素,那么时间复杂度是O(1),如果最终才找到,查找次数是n+1,则时间复杂度是O(n),所以平均查找次数是(n+1)/2。即最终时间复杂度还是O(n)

  顺序表查找的显著缺点就是,面对表长很大的情况下,查找效率很低,但好处是,算法简单,对静态查找表没有组织结构的需求。对于这种查找,由于查找概率不同,我们在组织数据时,可以将常用的记录放在前面,不常用的往后面放,效率可大大提高。

  4,使用Java8流式编程实现

  

[从今天开始修炼数据结构]查找算法概论和顺序表查找

原文:https://www.cnblogs.com/Joey777210/p/12114439.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!