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 快速排序 折半查找的界面实现 (递归与分治法)
折半查找的递归算法,非常实用,可以实现的C语言程序
用C语言开发的递归和非递归二分查找算法,具体内容详见代码
分别用递归和非递归方法实现二分查找算法 的完整程序,indexof()返回的是循环实现的二分法查找,getindex()实现的是递归算法实现的二分法查找。
递归调用的折半查找java代码,算法分析与设计实验报告。
NULL 博文链接:https://128kj.iteye.com/blog/1744446
折半查找(二分查找)折半查找(二分查找)折半查找(二分查找)折半查找(二分查找)折半查找(二分查找)折半查找(二分查找)
非递归查找的简单C语言程序,供初学者参考一下,哈哈。
所谓的二分查找,指的是将待查的数据序列而分化,然后对比中间中间值和要查找值,判断结果,相等则找到,小于则在左边的子序列找,大于则在右边的子序列找
这里本人自己写的是折半查找算法(又称二分查找)的c++代码的实现, 用的是递归的方法和非递归的方法, 里面的代码已经编译通过,并且优化好, 有需要的朋友可以下载借鉴一下
静态查找表。实现有序表的折半查找算法 静态查找表。实现有序表的折半查找算法 静态查找表。实现有序表的折半查找算法静态查找表。实现有序表的折半查找算法
包括常见的排序算法,以及折半查找,首先对要查找的数据排好序,然后用递归调用的方式实现折半查找(包括了两种实现方式)。指定一个排好序的数组和要查找的值,同时指定要查找的左边界和有边界。左右边界要位于数组...
用C语言实现折半查找,折半查找算法较简单
该算法是在折半算法的基础上,推广折段的段数,通过简单的数学模型证明了最优的分段数为3,而不是2(即折半)。在文章的最后给出了算法的C程序代码。如果有应用到实际中,算法还可以进一步精简。
java 快速排序 折半查找 的界面实现(并附有递归分治法PPT)
折半查找,也称为二分查找(Binary Search)或对数查找(Logarithmic Search),是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;...
折半查找算法,折半查找算法,折半查找算法
递归折半查找法基本的程序思想,初学者可以参考一下。