資料結構--二分查詢(Java版)
阿新 • • 發佈:2018-11-21
二分查詢:在一個有序陣列中查詢某個值。
一、迴圈實現
/**
* 使用迴圈的方式實現二分查詢
*
* @param array
* @param value
* @return 找到了value就返回該值,否則返回null
*/
public static Integer searchCirculation(int[] array, int value) {
int low = 0;
int high = array.length - 1;
int middle;
while (low <= high) {
middle = (low + high) / 2;
if (value < array[middle]) {
high = middle - 1;
} else if (value > array[middle]) {
low = middle + 1;
} else {
return array[middle];
}
}
return null;
}
二、遞迴實現
/**
* 使用遞迴的方式實現二分查詢
*
* @param array
* @param value
* @return
*/
public static Integer searchRecursive(int[] array, int value) {
return searchRecursive(array, value, 0, array.length - 1);
}
private static Integer searchRecursive (int[] array, int value, int low, int high) {
if (high < low) {
return null;
}
int middle = (low + high) / 2;
if (value < array[middle]) {
return searchRecursive(array, value, low, middle - 1);
} else if (value > array[middle]) {
return searchRecursive(array, value, middle + 1, high);
} else {
return array[middle];
}
}