java二分查找实现方法实例源码

java二分查找实现方法实例源码。看了“只有10%程序员能正确实现二分查找算法“这篇文章,闲着无聊,就实现一下他所说的正确的二分算法;

其实说穿了为什么只有10%的程序员会写错,只是因为没有考虑一些意外情况罢了;

思想:

二分查找能解决问题:预排序数组的查找

1.使用泛型将二分查找的对象泛化.

2.考虑以下几种意外情况:

 

如果数组为null,则抛异常;

如果没有找到,则返回-1;

package com.xiazdong.binarysearch.util;

public class BinarySearchUtil<T> {
/**
* 使用实例
* BinarySearchUtil<Integer> bs = new BinarySearchUtil<Integer>();
* int position = bs.binarySearch(new Integer[]{1,2,3,4,5},2);
*
* 注:
* class A implements Comparable{
* public int compareTo(A a){
* this 与 a比较
* 如果this<a , 则返回-1
* 如果this==a,则返回 0
* 如果this>a ,则返回 1
* }
* }
* @param <T> 任何实现了Comparable<T>的类型
* @param arr 数组
* @param key 查找的值
* @return 如果找到了,返回响应位置,如果没有找到,则返回-1
*/
public static <T extends Comparable<T>> int binarySearch(T [] arr, T key) {
if(arr==null){ //数组不能为空
throw new NullPointerException(“数组不能为空”);
}
int begin = 0;
int end = arr.length – 1;
int midden = (begin+end)/2;
while(begin<=end){

if(arr[midden].compareTo(key)==0){
return midden;
}
else if(arr[midden].compareTo(key)<0){
begin = midden+1;
}
else if(arr[midden].compareTo(key)>0){
end = midden-1;
}
midden = (begin+end)/2;
}
return -1;
}
} 本文链接地址: java二分查找实现方法实例源码