`
guyunduzai
  • 浏览: 17585 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论
阅读更多

       数据结构中经常用到查找算法,所谓查找,就是 在一个已知无(或有序)序队列中找出与给定关键字相同的数的具体位置。常用的查找算法有五中:顺序查找、二分查找(折半查找)、二叉排序树查找、哈希表法、分块查找。五中查找算法各有各的优点和缺点,在这篇博客中,我就介绍下各种查找方法的优缺点、局限性以及代码实现方式。

      一、顺序查找算法

     原理是让关键字与队列中的数从第一个开始逐个比较,直到找出与给定关键字相同的数为止,它的缺点是效率低下。时间复杂度为O(n),这种方式一般刚接触编程的人会用到,因为效率低下,在生产环境上很少使用的。实现代码如下:

public static int ordersearch(Integer[] arry, int des) {
        for (int i = 0; i <= arry.length - 1; i++) {
            if (des == arry[i])
                return i;
        }
        return -1;
    }

       二、二分(折半)查找算法

        二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。此查找算法的时间复杂度为o(log(n))。

        假如有队列:10,20,30,40,50,60,70,从中查找出60所在的位置,那么

         1、获取该队列的中间数据,40,与60所比较,发现不等且目标值>中间值

         2、在50,60,70中查找,取中间值60,发现与目标值相等,返回该数据所在位置,查询结束

          代码实现如下:

public static int binarySearch(Integer[] srcArray, int des) {
        int low = 0;
        int high = srcArray.length - 1;
        while ((low <= high) && (high <= srcArray.length - 1)) {
            // 获取中间位置
            int middle = low + ((high - low) >> 1);
            // 如果与中间位置数据相等,查找结束,返回结果
            if (des == srcArray[middle]) {
                return middle;
                // 目标值小于中间位置数据,说明目标值在前一半队列中,下一循环在前一半列表中查询
            } else if (des < srcArray[middle]) {
                high = middle - 1;
            } else {
                // 目标值大于中间位置数据,说明目标值在后一半队列中,下一循环在后一半列表中查询
                low = middle + 1;
            }
        }
        return -1;
    }

 

分享到:
评论

相关推荐

    排序查找算法总结

    排序查找算法总结 排序算法是计算机科学中的一种基本算法,用于对数据进行排序。在各种排序算法中,每种算法都有其特点和应用场景。本文将对10种经典的排序算法进行总结,并对每种算法的时间复杂度、空间复杂度和...

    【面试必备】排序、查找算法总结

    ### 【面试必备】排序、查找算法总结 #### 一、查找算法 查找算法在计算机科学中扮演着极其重要的角色,特别是在大数据处理、数据库查询以及信息检索等领域。下面将详细介绍几种常见的查找算法及其特点。 ##### ...

    查找算法总结+查找+线性查找+二分查找+哈希查找+树查找+算法

    查找算法是计算机科学中一种常见的算法,用于在数据结构中快速定位特定的元素。根据数据结构的不同,常见的查找算法包括线性查找、二分...查找算法总结+查找+线性查找+二分查找+哈希查找+树查找+算法 算法学习 python

    C++数据结构查找算法总结

    ### C++数据结构查找算法总结 #### 一、顺序查找 **定义与原理:** 顺序查找是最基础也是最直观的一种查找方法。它适用于任何类型的线性表,无论这些线性表是否有序。基本思路是从线性表的第一个元素开始,依次与...

    查找 算法——数据结构

    在计算机科学中,查找算法是数据结构领域的重要组成部分,用于在数据集合中寻找特定值的过程。本实验主要探讨了一种高效查找算法——折半查找(Binary Search),并将其与线性查找等其他查找方法进行了对比。 折半...

    经典数据结构和算法总结

    经典数据结构和算法总结 本文总结了各种经典的数据结构和算法,包括链表、字符串、二叉树、哈夫曼树、图、查找、排序等。 链表是一种非常基本的数据结构,被广泛的用在各种语言的集合框架中。链表中的元素在内存中...

    折半查找算法的改进和程序实现

    总结而言,通过对传统折半查找算法的改进,引入了三段查找算法,并通过数学模型证明了其平均查找长度的最优性。在C语言的实现中,不仅详细展示了算法的具体步骤,还强调了优化的实际意义。这种改进不仅为理论研究...

    3种查找算法——数据结构实验

    总结来说,掌握这些基本查找算法对于理解数据结构和算法的基础至关重要。在实际应用中,开发者需要根据数据的特性、查询需求以及性能要求来选择合适的查找算法,以优化程序性能。通过实验和实践,不仅可以深化理论...

    查找算法和排序算法小结

    本文总结了常见的查找算法和排序算法,包括顺序查找、二分查找、选择排序、冒泡排序、二分排序、插入排序、希尔排序、堆排序、归并排序等。 一、查找算法 1. 顺序查找(Sequential Search) 顺序查找是一种简单...

    综合查找算法课程设计报告书

    总结,本课程设计全面覆盖了查找算法的主要类型,不仅提升了学生的编程技能,还深化了他们对算法效率和适用性的理解。通过这样的实践,学生能够更好地应对实际工作中遇到的查找问题,为未来的软件开发奠定坚实基础。

    分块查找算法实现

    总结来说,分块查找算法是提高大规模数据查找效率的有效手段,通过合理划分数据块并建立索引,能够在一定程度上平衡查找速度和空间成本。在处理大量数据时,理解并合理应用这种算法,对于优化系统性能至关重要。

    查找算法的总结

    根据给定文件的信息,我们可以总结出以下几种查找算法的关键知识点: ### 一、顺序查找 #### 定义 顺序查找是最基本的一种查找方法,适用于线性表中的数据查找。其核心思想是从序列的第一个元素开始,按照顺序逐一...

    查找算法代码C++——包括顺序、二分、BST、哈希

    在IT领域,查找算法是计算机科学中的核心概念,它们用于在数据结构中高效地找到特定元素。本资源提供了C++实现的四种主要查找算法:顺序查找、二分查找、BST(二叉搜索树)查找以及哈希查找。下面将详细阐述这四种...

    2016年ACM常用算法总结

    从给定的文件信息中,可以提取到关于ACM常用算法的知识点。ACM国际大学生程序设计竞赛(ACM International Collegiate Programming Contest,简称...然而,上述内容仍然是对ACM常用算法知识点的较为全面和系统的总结。

    java 几种查找算法

    根据给定的文件信息,我们可以总结出几种在Java中实现的查找算法,这些算法是数据结构和算法领域的重要组成部分,广泛应用于各种计算机科学场景中。下面将详细解释这些算法及其在Java中的实现。 ### 顺序查找...

    数据结构-查找算法(代码+报告)

    数据结构中的查找算法是计算机科学领域的一个核心主题,它涵盖了如何高效地在数据集合中定位特定元素的方法。根据所提供的文件信息,本次实验旨在深入理解并实践查找算法,特别是静态查找和动态查找,以及它们在不同...

    Java实现遍历、排序、查找算法及简要说明.docx

    在本文档中,我们主要探讨了Java中关于遍历、排序和查找算法的实现和简要说明。首先,我们详细介绍了二叉树的遍历算法,包括四种主要的遍历方式:先序遍历、中序遍历、后序遍历和层次遍历。 1. **遍历算法**: - *...

    常用排序查找算法详解

    下面我们将深入探讨这些常用排序查找算法。 首先,我们来看看排序算法。排序是一系列将一组数据按照特定顺序排列的过程。这里提及的"【排序结构1】插入排序"是一种简单直观的算法,它通过构建有序序列,对于未排序...

Global site tag (gtag.js) - Google Analytics