折半查找是使用广泛的查找算法,可采用递归及非递归实现方式。
折半查找最适合情况符合要求如下要求:
1、源数据必须是有序的。
2、源数据中不存在重复数据(如果存在重复数据,需要做特殊处理,如:查到数据后在顺序向前及向后查找相邻的相同数据)。
java简单实现代码如下:
/**
* <p>
* 对有序数组进行二分查找(递归查找)
* </p>
* <p>
* 折半查找采用递归,最多递归次数为log(high-low)+1
* </p>
*
* @param arr
* 有序数组(不存在重复数据)
* @param k
* 要查找的数据
* @param low
* 数组起始位置
* @param hight
* 数组结束位置
* @return 要查找的数据在数组中的下标
*/
public static int binarySearchRecursion(int[] arr, int k, int low, int hight) {
if (low < 0 || hight >= arr.length) {
throw new java.lang.ArrayIndexOutOfBoundsException();
}
if (low > hight) {
return -1;
}
int mid = (low + hight) >> 1;
if (arr[mid] == k) {
return mid;
}
if (k < arr[mid]) {
return binarySearchRecursion(arr, k, low, mid - 1);
} else {
return binarySearchRecursion(arr, k, mid + 1, hight);
}
}
/**
* <p>
* 对有序数组进行二分查找(非递归查找)
* </p>
*
* @param arr
* 有序数组(不存在重复数据)
* @param k
* 要查找的数据
* @param low
* 数组起始位置
* @param hight
* 数组结束位置
* @return 要查找的数据在数组中的下标
*/
public static int binarySearch(int[] arr, int k, int low, int hight) {
if (low < 0 || hight >= arr.length) {
throw new java.lang.ArrayIndexOutOfBoundsException();
}
if (low > hight) {
return -1;
}
int mid = 0;
while (hight >= low) {// 最坏循环次数log(high-low)+1
mid = (hight + low) >> 1;
if (arr[mid] == k) {
return mid;
}
if (k < arr[mid]) {
hight = mid - 1;
} else {
low = mid + 1;
}
}
return -1;
}
分享到:
相关推荐
### 静态查找表与折半查找算法 在计算机科学中,静态查找表是一种用于存储数据并能够高效检索特定元素的数据结构。本篇文章将详细解释如何实现一个静态查找表,并利用折半查找算法(也称二分查找算法)来查询表中的...
本文将详细探讨四种常见的查找算法:顺序查找、折半查找、二叉排序树查找以及哈希表查找,并结合提供的"综合查找算法"课程设计项目,解析其在实际应用中的特点和优势。 **顺序查找**是最基础的查找算法,适用于任何...
折半查找算法是一种在有序数组中寻找特定元素的搜索算法,其基本思想是将数组分为两半,通过比较中间元素和目标值来缩小搜索范围。然而,传统的折半查找在某些情况下并不一定是效率最高的方法。通过对查找算法的改进...
折半查找算法在顺序表中插入一个元素讲解 折半查找算法是一种常用的查找算法,它可以在已经排好序的顺序表中快速地找到某个元素。下面我们来详细讲解折半查找算法在顺序表中插入一个元素的过程。 折半查找算法的...
总结来说,折半查找是一种高效的查找算法,特别适合于处理大型有序数据集。通过不断缩小查找范围,它能显著减少比较次数,从而提高查找效率。然而,这种方法依赖于数据的预排序,对于无序数据则需先进行排序,这可能...
在本主题中,我们将聚焦于两种基础但重要的查找算法:顺序查找和折半查找。 **顺序查找(Sequential Search)** 顺序查找是最简单的查找算法,适用于任何线性数据结构,如数组或链表。其基本思想是从数据集合的第一...
在上面的代码中,我们实现了两种折半查找算法:非递归算法和递归算法。在main函数中,我们首先输入数组的元素个数和数组元素,然后输入要查询的数,并使用BinSearch1或BinSearch2函数来查找该元素。 本文详细介绍了...
这里我们将深入探讨两种常见的查找算法:二叉树查找和折半查找。 首先,我们来了解一下**折半查找**(也称为二分查找)。这种算法适用于有序的数据集合,如数组。其基本思想是每次将查找区间缩小一半,直到找到目标...
折半查找(也称为二分查找)是一种高效的查找算法,适用于有序数组。通过不断将查找区间对半分割,可以快速定位目标值的位置,时间复杂度为O(log n),其中n是数组长度。本文将详细介绍如何使用递归方法实现折半查找...
### 折半查找算法 #### 一、简介 折半查找算法(Binary Search),也称为二分查找算法,是一种在有序数组中查找特定元素的高效算法。它的基本思想是在有序数组中通过比较中间元素与目标值来逐步缩小查找范围,直到...
在这个主题中,我们主要关注查找和排序算法,特别是二分查找(折半查找)算法。这些算法在实际编程中具有广泛应用,包括数据库索引、搜索引擎优化和各种计算问题的解决。 首先,我们来看查找算法。查找是数据结构中...
本文将详细介绍几种典型的查找算法,包括折半查找、二叉排序树查找、哈希表查找等。 一、折半查找算法 折半查找算法是一种常用的查找算法,适用于有序的数组或链表。其基本思想是,将查找的目标值与数组或链表的...
在给定的标题“顺序查找和折半查找在10个元素中查找20”中,我们关注的是两种基本的查找算法:顺序查找(Sequential Search)和折半查找(Binary Search)。这些算法在处理有序或无序数据集时各有优势,下面我们将...
查找算法集 查找算法是计算机科学中的一种基本算法,用于在数组或链表中搜索指定的元素。以下是四种常见的查找算法:顺序查找、二分查找、插值查找和动态查找。 顺序查找 顺序查找是一种最简单的查找算法,它的...
本篇文章将详细讨论三种常见的查找算法:哈希查找、顺序查找和折半查找,并结合提供的文件名,我们将深入理解每种查找算法的实现原理以及它们在实际应用中的优缺点。 1. **哈希查找(Hash Find)** 哈希查找是一种...
折半查找算法实现(C++) 折半查找算法是数据结构与算法中的一种重要查找方法,它可以通过数学方法计算其时间复杂度。在本文中,我们将详细介绍折半查找算法的实现,并提供 C++ 语言的代码实现。 一、折半查找算法...
折半查找(二分查找)是一种高效的查找算法,对于顺序存储的有序表,可以快速地找到指定的关键字记录。该算法的基本思想是,每次比较给定值 K 与中间位置记录的关键字值,并根据比较结果确定下一步的查找范围,直到...
本实验主要探讨了三种基本的查找算法:顺序查找、折半查找(二分查找)和索引查找,这些算法都是在数组或集合中寻找特定元素的重要方法。下面将详细解释这三种查找算法,并结合C语言编程环境进行深入分析。 1. **...
### C语言实现折半查找算法 #### 知识点概览 1. **折半查找算法的基本原理** 2. **C语言实现折半查找的关键步骤** 3. **代码解析及优化建议** 4. **时间复杂度分析** 5. **适用场景与限制条件** #### 折半查找...
数据结构在计算机科学中占有重要地位,而折半查找算法是数据结构中一种高效搜索算法。本主题将深入探讨折半查找(Binary Search)算法,以及如何使用C语言实现这一算法。 折半查找,又称二分查找,是针对有序数组的...