Java折半二叉树_java实现折半查找(二分查找)的递归和非递归算法

一、基本概念 每个结点最多有两棵子树,左子树和右子树,次序不可以颠倒。 性质: 1、非空二叉树的第n层上至多有2^(n-1)个元素。 2、深度为h的二叉树至多有2^h-1个结点。 满二叉树:所有终端都在同一层次,且非终端结点的度数为2。 在满二叉树中若其深度为h,

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://wintys.blog.51cto.com/425414/94051Java二分查找实现,欢迎大家提出交流意见./***名称:BinarySearch*功能:实现了折半查找(二分查找)的递归和非递归算法.*说明:*

1、要求所查找的数组已有序,并且其中元素已实现Comparable接口,如Integer、String等.*

2、非递归查找使用search();,递归查找使用searchRecursively();**本程序仅供编程学习参考**@author:

Winty*@date:

2008-8-11*@email:

wintys@gmail.com*/class BinarySearch> {

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 binSearch = new BinarySearch(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 binSearch = new BinarySearch(dataStr);

//System.out.println("Key index:" + binSearch.search("A") );

}}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值