700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Java实现折半查找(二分查找)的递归和非递归算法

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

时间:2022-12-03 17:04:00

相关推荐

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

Java二分查找实现,欢迎大家提出交流意见.

/**

*名称:BinarySearch

*功能:实现了折半查找(二分查找)的递归和非递归算法.

*说明:

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

*2、非递归查找使用search();,递归查找使用searchRecursively();

*

*本程序仅供编程学习参考

*

*@author: Winty

*@date: -8-11

*@email:[email]wintys@[/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(pareTo(data[mid]) < 0){

high = mid - 1;

}else if(pareTo(data[mid]) > 0){

low = mid + 1;

}else if(pareTo(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 = pareTo(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") );

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。