public class TestSearch {
public static void main(String[] args) {
// 数组必需是有序的
int array[] = {3,6,10,12,25,48,50,56,88,100,102,106,109,220};
System.out.println(search(array, 25));
System.out.println(search(array, 0, array.length - 1, 48));
System.out.println(search(array, 0, array.length - 1, 10000));
}
/**
* 递归查找
*
* @param array 数组
* @param startIndex 开始位置
* @param endIndex 结束位置
* @param key 查找的数字
* @return 数组下标,没有返回-1
*/
public static int search(int array[], int startIndex, int endIndex, int key) {
int middle = (endIndex - startIndex) / 2 + startIndex;
if(startIndex >endIndex){
return -1;
}
if (array[middle] == key) {
return middle;
} else if (key > array[middle]) {
return search(array, middle + 1, endIndex, key);
} else if (key < array[middle]) {
return search(array, startIndex, middle - 1, key);
}
return -1;
}
/**
* while循环查找
*
* @param array 数组
* @param key 查找的数字
* @return 数组下标,没有返回-1
*/
public static int search(int[] array, int key) {
int startIndex = 0;
int endIndex = array.length - 1;
while (startIndex <= endIndex) {
int middle = (startIndex + endIndex) / 2;
if (key == array[middle]) {
return middle;
} else if (key < array[middle]) {
endIndex = middle - 1;
} else {
startIndex = middle + 1;
}
}
return -1;
}
}
运行后:
4
5
-1