前言
今天做一个例题 , 用到了折半查询这个算法 , 所以记录一下.
- 折半查询的效率非常高 , 而且学习起来也非常简单 , 非常容易理解 .
代码
代码利用了泛型 , 也就是说可以支持任意类型的数组进行查询 .
- 结合代码看图 , 就非常容易理解了.
- mid表示中间的索引 , key是搜索的值.
public class BinSearch<T extends Comparable> {
//继承于Comparable才可以使用compareTo进行比较.
private T[] arr;
public BinSearch(T[] arr) {
this.arr = arr;
}
public int search(T key ) {
int low = 0;
int high = arr.length;
int mid = 0;
while(low <= high ) {
mid = (low + high ) / 2; //先获取中间的位置
if(key.compareTo(arr[mid]) > 0 ) {
low = mid + 1; //说明在中间右边
}else if (key.compareTo(arr[mid]) < 0 ){
high = mid - 1; //说明在中间左边
}else {
return mid;
}
}
}