`
gaojingsong
  • 浏览: 1202652 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【查找算法之折半查找算法】

阅读更多

折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略。基本思想是,将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如 果x<a[n/2],则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。如果x>a[n/2],则我们只要在数组a的右半部继续搜索x。每找一次目标范围就缩小一半,缺点是:集合中元素必须是有序的,升序降序都行。

 

折半查找法:

在有序按照升序排列的表中,把待查找数据值与查找范围的中间元素值进行比较,会有三种情况出现:

1、待查找数据值与中间元素值正好相等,则返回中间元素值的索引。

2、待查找数据值比中间元素值小,则以整个查找范围的前半部分作为新的查找范围,执行1),

              直到找到相等的值。

3、待查找数据值比中间元素值大,则以整个查找范围的后半部分作为新的查找范围,执行1),

             直到找到相等的值。

4、如果最后找不到相等的值,则返回错误提示信息。

      按照二叉树来理解:中间值为二叉树的根,前半部分为左子树,后半部分为右子树。

      折半查找法的查找次数正好为该值所在的层数。等概率情况下,约为log2(n+1)-1

 

代码示例:

方案一、非递归查找

/**

* 假设升序排列

* @param srcArray  集合

* @param des  待查找元素

* @return 也许能找到,也许找不到,返回位置

*/

public static int binarySearch(Integer[] srcArray, int des) {

   int low = 0;                     //第一个元素下标为0

   int high = srcArray.length - 1; //最后一元素位置下标为长度减1

 

   while ((low <= high) && (low <= srcArray.length - 1)

           && (high <= srcArray.length - 1)) {

   

    //左移一位,相当于除以2,得到最中间的元素

       int middle = (high + low) >> 1;

           

       if (des == srcArray[middle]) {

        //中间元素刚好等于待查找元素

           return middle;

       } else if (des < srcArray[middle]) {

        //因为升序排列,中间元素大于待查找元素,因因此待查找元素如果存在,只会落在左半边元素中

           high = middle - 1;

       } else {

        //因为升序排列,中间元素小于待查找元素,因因此待查找元素如果存在,只会落在右半边元素中

           low = middle + 1;

       }

   }

   return -1;

}

 

 

方案二、递归查找

// 递归法(升序排列的集合)

int IterBiSearch(int data[], int target, int begin, int last) {

int mid = (begin + last) / 2;

if (target == data[mid]) {

return mid;

} else if (target < data[mid]) {

return IterBiSearch(data, target, begin, mid - 1);

} else if (target > data[mid]) {

return IterBiSearch(data, target, mid + 1, last);

}

return -1;

}

0
1
分享到:
评论

相关推荐

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

    折半查找算法是一种在有序数组中寻找特定元素的搜索算法,其基本思想是将数组分为两半,通过比较中间元素和目标值来缩小搜索范围。然而,传统的折半查找在某些情况下并不一定是效率最高的方法。通过对查找算法的改进...

    折半查找的递归算法

    递归版本的折半查找算法与非递归版本的主要区别在于使用了函数调用自身的方式来实现查找区间对半分割的过程。递归版本通常更简洁,但可能会增加程序的调用栈开销。 #### 四、C语言实现 以下是一个使用C语言实现...

    折半查找算法在顺序表中插入一个元素讲解.pdf

    折半查找算法在顺序表中插入一个元素讲解 折半查找算法是一种常用的查找算法,它可以在已经排好序的顺序表中快速地找到某个元素。下面我们来详细讲解折半查找算法在顺序表中插入一个元素的过程。 折半查找算法的...

    折半查找算法

    ### 折半查找算法 #### 一、简介 折半查找算法(Binary Search),也称为二分查找算法,是一种在有序数组中查找特定元素的高效算法。它的基本思想是在有序数组中通过比较中间元素与目标值来逐步缩小查找范围,直到...

    静态查找表。实现有序表的折半查找算法

    ### 静态查找表与折半查找算法 在计算机科学中,静态查找表是一种用于存储数据并能够高效检索特定元素的数据结构。本篇文章将详细解释如何实现一个静态查找表,并利用折半查找算法(也称二分查找算法)来查询表中的...

    综合查找算法(顺序查找、折半查找、二叉排序树、哈希表)-数据结构课程设计

    本文将详细探讨四种常见的查找算法:顺序查找、折半查找、二叉排序树查找以及哈希表查找,并结合提供的"综合查找算法"课程设计项目,解析其在实际应用中的特点和优势。 **顺序查找**是最基础的查找算法,适用于任何...

    折半查找(二分查找)折半查找(二分查找)折半查找(二分查找)

    折半查找算法可以分为三个步骤: 1. 确定中间位置记录的序号 m = [(n + 1)/2],其中 n 为记录个数。 2. 将给定值 K 与中间位置记录的关键字值进行比较,有三种可能的结果: * K = r[m].key:查找成功,结束查找...

    Java数据结构实现折半查找的算法过程解析

    折半查找是一种常用的查找算法,通过将查找范围不断地缩小来实现快速的查找。Java数据结构实现折半查找的算法过程解析中,主要介绍了折半查找的理论基础、实现方法和优化技巧。 一、折半查找的理论基础 折半查找的...

    zhebanchazhao.rar_折半 查找_折半查找_折半查找算法_查找_查找算法

    以下是关于折半查找算法的详细解释和应用。 一、算法描述: 1. 确定数组的起始索引(left)和结束索引(right),通常初始时left为0,right为数组长度减1。 2. 如果left ,则执行以下步骤: - 计算中间索引mid,即...

    java实现折半查找算法

    所谓的二分查找,指的是将待查的数据序列而分化,然后对比中间中间值和要查找值,判断结果,相等则找到,小于则在左边的子序列找,大于则在右边的子序列找

    折半查找算法实现(C++).doc

    折半查找算法实现(C++) 折半查找算法是数据结构与算法中的一种重要查找方法,它可以通过数学方法计算其时间复杂度。在本文中,我们将详细介绍折半查找算法的实现,并提供 C++ 语言的代码实现。 一、折半查找算法...

    两种查找算法,二叉树查找,折半查找

    这里我们将深入探讨两种常见的查找算法:二叉树查找和折半查找。 首先,我们来了解一下**折半查找**(也称为二分查找)。这种算法适用于有序的数据集合,如数组。其基本思想是每次将查找区间缩小一半,直到找到目标...

    数据结构折半查找算法(C语言版)

    数据结构在计算机科学中占有重要地位,而折半查找算法是数据结构中一种高效搜索算法。本主题将深入探讨折半查找(Binary Search)算法,以及如何使用C语言实现这一算法。 折半查找,又称二分查找,是针对有序数组的...

    顺序查找和折半查找

    在本主题中,我们将聚焦于两种基础但重要的查找算法:顺序查找和折半查找。 **顺序查找(Sequential Search)** 顺序查找是最简单的查找算法,适用于任何线性数据结构,如数组或链表。其基本思想是从数据集合的第一...

    chazhao-.zip_查找_查找 算法_顺序折半分块

    本主题将深入探讨在C语言中实现的三种查找算法:顺序查找、折半查找以及分块查找。这三种算法各有特点,适用于不同的场景,对于理解数据查找的效率至关重要。 首先,我们来看**顺序查找**(Sequential Search)。...

    折半查找算法及matlab代码实现

    ### 折半查找算法及其MATLAB实现 #### 折半查找算法原理 折半查找算法是一种高效的搜索技术,尤其适用于已经排序的数组。该算法的基本思想是通过不断将搜索范围减半来查找目标值,因此也被称为二分查找。与线性...

    数据结构查找、排序、二分查找、折半查找算法

    在这个主题中,我们主要关注查找和排序算法,特别是二分查找(折半查找)算法。这些算法在实际编程中具有广泛应用,包括数据库索引、搜索引擎优化和各种计算问题的解决。 首先,我们来看查找算法。查找是数据结构中...

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

    本实验主要探讨了三种基本的查找算法:顺序查找、折半查找(二分查找)和索引查找,这些算法都是在数组或集合中寻找特定元素的重要方法。下面将详细解释这三种查找算法,并结合C语言编程环境进行深入分析。 1. **...

    数据结构实验七查找.doc

    实验七的主题是“查找”,主要涉及查找表、动态查找表、静态查找表和平均查找长度的概念,以及线性表中的顺序查找和折半查找方法。...通过这些练习,学生能深入理解查找算法和哈希表的工作原理,提高编程能力。

    哈希、顺序、折半查找的算法代码

    本篇文章将详细讨论三种常见的查找算法:哈希查找、顺序查找和折半查找,并结合提供的文件名,我们将深入理解每种查找算法的实现原理以及它们在实际应用中的优缺点。 1. **哈希查找(Hash Find)** 哈希查找是一种...

Global site tag (gtag.js) - Google Analytics