美文网首页
数据结构——查找算法

数据结构——查找算法

作者: zgwyvd | 来源:发表于2019-01-11 11:15 被阅读8次

查找在实际的应用开发中很常见,所以有必要详细深入的梳理一下。根据查找过程时,是否需要同时插入或删除元素,可分为静态查找和动态查找。

一、静态查找

1.顺序查找
顺序查找又称为线性查找,是一种最简单、最常用的查找方法。

    /**
     * 顺序查找
     * @param a 查找表
     * @param x 查找关键字
     * @return 关键字在查找表中的位置,未找到则返回-1
     */
    public static int sequenceSearch(int a[], int x) {
        if(a != null && a.length > 0) {
            for (int i = 0; i < a.length; i++) {
                if(a[i] == x) {
                    return i;
                }
            }
        }
        return -1;
    }

下面说说顺序查找算法的事件复杂度,如果查找成功,平均的遍历次数为(n+1)/2;如果未找到,则遍历次数为n。顺序查找的优点就是算法简单、应用广泛,并且对表的结构没有任何要求;缺点就是查找效率较低,当数据量较大时,不推荐使用顺序查找。

2.二分查找
二分查找是一种很高效的方法,但前提是需要查找表中的元素必须有序排列,如果要使用该方法,则需要先对查找表中的元素进行排序。
算法思路为,取表(元素按照升序排列)中间元素作为比较对象,如果给定值与中间元素相等,则查找成功;如果给定值比中间元素大,则在中间元素右边的区间继续查找;如果给定值比中间元素小,则在中间元素左边的区间继续查找,以此类推,具体的实现过程如下:

    /**
     * 二分查找算法   
     * @param a 查找表
     * @param x 查找关键字
     * @return 关键字在查找表中的位置,未找到则返回-1
     */
    public static int binarySearch(int a[], int x) {
        if(a != null && a.length > 0) {
            int low = 0;
            int high = a.length;
            int mid = 0;
            while (low < high) {
                mid = (high + low)/2;
                if(a[mid] == x) {
                    return mid;
                }else if (a[mid] > x) {
                    high = mid - 1;
                }else {
                    low = mid + 1;
                }
            }
        }
        return -1;
    }

二分查找的效率较高,具体的时间复杂度为log2(n),也就是说8个元素中,只需要查找3次就可以知道结果(包括查找成功和未找到)。

3.斐波那契查找
需要介绍一下黄金分割比例,是指事物各部分之间存在着一定的数学关系。将事物一分为二,较大部分与较小部分之比等于整体与较大部分之比,比值为1:0.618或者1.618:1。
还需要介绍斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89…….(从第三个数开始,后边每一个数都是前两个数的和)。随着斐波那契数列的递增,前后两个数的比值会越来越接近0.618,利用这个特性,我们就可以将黄金分割比例运用到查找技术中。
斐波那契查找是在二分查找的基础上进行优化,查找表必须是有序排列。
算法思路:

4.插值查找
5.分块查找

二、动态查找

1.二叉排序树
2.平衡二叉树

相关文章

  • 音视频开发之旅(27) 算法序列 - 二叉查找树

    目录 常见的查找数据结构和算法介绍 二叉查找树 资料 收获 一、常见的查找数据结构和算法介绍 1.1 链表(顺序查...

  • 排序算法

    算法与数据结构基础 查找算法: 二分查找法: 简介:二分查找法又被称为折半查找法,用于预排序的查找问题 过程: 如...

  • 数据结构与算法--Boyer-Moore和Rabin-Karp子

    数据结构与算法--Boyer-Moore和Rabin-Karp子字符串查找 Boyer-Moore字符串查找算法 ...

  • 数据结构与算法--散列表

    数据结构与算法--散列表 之前学习了基于链表的顺序查找、基于有序数组的二分查找、二叉查找树、红黑树,这些算法在查找...

  • 剑指Offer--(3)查找空格

    title: 剑指Offer--(3)查找空格categories: 算法与数据结构tags: 数据结构 题目 请...

  • 索引

    排好序的快速查找数据结构 定义:数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式...

  • 算法:二分法查找(折半查找法)

    算法:二分法查找(折半查找法) 这是最经典的折半查找,而在面试的时候往往会对某些经典的数据结构和算法进行魔改,这道...

  • 数据结构与算法 树 引言 顺序查找 ​ 哨兵的方式 ​ 时间复杂度为O(N) 二分查找查找树的形式我...

  • 常考的数据结构与算法之算法

    本文记录一下我学习数据结构与算法中算法的知识点,使用的语言是C/C++语言 查找 二分查找又叫折半查找,要求线性表...

  • 想去阿里——这是你必备的实力

    算法和数据结构数组、链表、二叉树、队列、栈的各种操作(性能,场景) 二分查找和各种变种的二分查找 各类排序算法以及...

网友评论

      本文标题:数据结构——查找算法

      本文链接:https://www.haomeiwen.com/subject/xlotdqtx.html