Java二分查找实现,欢迎大家提出交流意见.
/**
*名称:BinarySearch
*功能:实现了折半查找(二分查找)的递归和非递归算法.
*说明:
* 1、要求所查找的数组已有序,并且其中元素已实现Comparable<T>接口,如Integer、String等.
* 2、非递归查找使用search();,递归查找使用searchRecursively();
*
*本程序仅供编程学习参考
*
*@author: Winty
*@date: 2008-8-11
*@email: [email]wintys@gmail.com[/email]
*/
class BinarySearch<T extends Comparable<T>> {
private T[] data;//要排序的数据
public BinarySearch(T[] data){
this.data = data;
}
public int search(T key){
int low;
int high;
int mid;
if(data == null)
return -1;
low = 0;
high = data.length - 1;
while(low <= high){
mid = (low + high) / 2;
System.out.println("mid " + mid + " mid value:" + data[mid]);///
if(key.compareTo(data[mid]) < 0){
high = mid - 1;
}else if(key.compareTo(data[mid]) > 0){
low = mid + 1;
}else if(key.compareTo(data[mid]) == 0){
return mid;
}
}
return -1;
}
private int doSearchRecursively(int low , int high , T key){
int mid;
int result;
if(low <= high){
mid = (low + high) / 2;
result = key.compareTo(data[mid]);
System.out.println("mid " + mid + " mid value:" + data[mid]);///
if(result < 0){
return doSearchRecursively(low , mid - 1 , key);
}else if(result > 0){
return doSearchRecursively(mid + 1 , high , key);
}else if(result == 0){
return mid;
}
}
return -1;
}
public int searchRecursively(T key){
if(data ==null)return -1;
return doSearchRecursively(0 , data.length - 1 , key);
}
public static void main(String[] args){
Integer[] data = {1 ,4 ,5 ,8 ,15 ,33 ,48 ,77 ,96};
BinarySearch<Integer> binSearch = new BinarySearch<Integer>(data);
//System.out.println("Key index:" + binSearch.search(33) );
System.out.println("Key index:" + binSearch.searchRecursively(3) );
//String [] dataStr = {"A" ,"C" ,"F" ,"J" ,"L" ,"N" ,"T"};
//BinarySearch<String> binSearch = new BinarySearch<String>(dataStr);
//System.out.println("Key index:" + binSearch.search("A") );
}
}
文章来源:
http://wintys.blog.51cto.com/425414/94051
分享到:
相关推荐
总的来说,快速排序和折半查找是计算机科学中不可或缺的算法,通过递归和分治策略,可以在Java中高效地实现这些算法,并结合界面设计,为用户提供直观的交互体验。在实际项目中,理解和掌握这些算法有助于优化数据...
以上是对折半查找算法及其递归和非递归实现的详细解析。在实际编程中,理解并运用这些概念对于提高搜索效率,特别是在处理大量数据时,具有重要意义。在 `biSearch.java` 文件中,我们可以看到具体的代码实现,这将...
递归版本的折半查找算法与非递归版本的主要区别在于使用了函数调用自身的方式来实现查找区间对半分割的过程。递归版本通常更简洁,但可能会增加程序的调用栈开销。 #### 四、C语言实现 以下是一个使用C语言实现...
### Java代码递归的折半查找算法 #### 算法概述 递归版本的折半查找算法是一种高效的搜索技术,适用于已排序的数组。它的工作原理是将问题分解为更小的问题,直到找到目标值或确定目标值不存在于数组中为止。这种...
分别用递归和非递归方法实现二分查找算法 的完整程序,indexof()返回的是循环实现的二分法查找,getindex()实现的是递归算法实现的二分法查找。
在C++中,这两个实现可能分别对应于`二分查找递归代码.cpp`和`二分查找非递归代码.cpp`中的内容。在实际应用中,根据具体场景和性能需求,可以选择合适的实现方式。需要注意的是,二分查找的前提是输入数组必须是...
非递归查找的简单C语言程序,供初学者参考一下,哈哈。
折半查找算法,也称为二分查找算法,其基本原理是在有序数组中查找特定元素。该算法通过不断将搜索区间缩小为一半,直到找到目标值或搜索区间为空。尽管折半查找在时间复杂度上具有对数级别(O(log n)),但在处理大...
用C语言开发的递归和非递归二分查找算法,具体内容详见代码
所谓的二分查找,指的是将待查的数据序列而分化,然后对比中间中间值和要查找值,判断结果,相等则找到,小于则在左边的子序列找,大于则在右边的子序列找
包括常见的排序算法,以及折半查找,首先对要查找的数据排好序,然后用递归调用的方式实现折半查找(包括了两种实现方式)。指定一个排好序的数组和要查找的值,同时指定要查找的左边界和有边界。左右边界要位于数组...
本篇文章将详细解释如何实现一个静态查找表,并利用折半查找算法(也称二分查找算法)来查询表中的数据。 #### 一、静态查找表的概念 静态查找表是一种只进行查找操作而不允许插入或删除操作的数据结构。其主要...
### C语言实现折半查找算法 #### 知识点概览 1. **折半查找算法的基本原理** 2. **C语言实现折半查找的关键步骤** 3. **代码解析及优化建议** 4. **时间复杂度分析** 5. **适用场景与限制条件** #### 折半查找...
在上面的代码中,我们实现了两种折半查找算法:非递归算法和递归算法。在main函数中,我们首先输入数组的元素个数和数组元素,然后输入要查询的数,并使用BinSearch1或BinSearch2函数来查找该元素。 本文详细介绍了...
非递归实现的折半法查找算法可以使用以下步骤: 1. 初始化低位索引`low`和高位索引`high`,分别设置为数组的起始索引和结束索引。 2. 计算中点索引`mid`,即`low`和`high`的平均值。 3. 将目标值与中点值比较,如果...
2. 非递归调用:通过非递归调用实现折半查找,指定一个排好序的数组和要查找的值,同时指定左边界和右边界。在非递归调用过程中,通过while循环不断地缩小查找范围,直到找到目标元素或查找失败。 ```java static ...
3. 算法简单:折半查找算法的实现非常简单,易于理解和编程。 折半查找算法的缺点: 1. 需要排序:折半查找算法只能用于已经排好序的顺序表,如果顺序表未经排序,折半查找算法将无法正确地工作。 2. 不适合小规模...
折半查找算法,也称为二分查找算法,是一种在有序序列中快速定位特定元素的技术。...随着计算机技术的发展,对二分查找算法的研究和应用仍在不断深入,但其基本原理和实现方式仍然具有重要的理论和实践价值。