谁能送给我一个2分叉查询方法
public class BinarySearch {
/**
* 二分查找算法
*
* @param srcArray 有序数组
* @param key 查找元素
* @return key的数组下标,没找到返回-1
*/
public static void main(String[] args) {
int srcArray[] = {3,5,11,17,21,23,28,30,32,50,64,78,81,95,101};
System.out.println(binSearch(srcArray, 0, srcArray.length - 1, 81));
}
// 二分查找递归实现
public static int binSearch(int srcArray[], int start, int end, int key) {
int mid = (end - start) / 2 + start;
if (srcArray[mid] == key) {
return mid;
}
if (start >= end) {
return -1;
} else if (key > srcArray[mid]) {
return binSearch(srcArray, mid + 1, end, key);
} else if (key < srcArray[mid]) {
return binSearch(srcArray, start, mid - 1, key);
}
return -1;
}
// 二分查找普通循环实现
public static int binSearch(int srcArray[], int key) {
int mid = srcArray.length / 2;
if (key == srcArray[mid]) {
return mid;
}
int start = 0;
int end = srcArray.length - 1;
while (start <= end) {
mid = (end - start) / 2 + start;
if (key < srcArray[mid]) {
end = mid - 1;
} else if (key > srcArray[mid]) {
start = mid + 1;
} else {
return mid;
}
}
return -1;
}
}
同学你敢不敢google一下,网上到处都有啊
http://www.google.com.hk/search?sourceid=chrome&ie=UTF-8&q=%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE+%E7%AE%97%E6%B3%95+%E5%88%86%E6%9E%90
天知地知google百度知
网上很多东西都有,就看你舍不舍得花时间了。 public static void main(String[] args) {
int[] ints = { 2, 23, 53, 64, 158, 221, 260, 278, 651, 1564, 2355 };
System.out.println("the position is:"
+ new BinarySearch().find(ints, 651));
}
public int find(int[] values, int key) {
int lowerBound = 0;
int upperBound = values.length - 1;
int curIn;
while (true) {
curIn = (lowerBound + upperBound) / 2;
if (values[curIn] == key) {
return curIn;
} else if (lowerBound > upperBound) {
return values.length;
}
if (values[curIn] < key) {
lowerBound = curIn + 1;
} else {
upperBound = curIn - 1;
}
}
}