所用数组参考上一章: 数据结构复习(1) MyArrayList—线性表
/**
* 线性查找 有则返回下标,否则返回-1
*
* @param element
* @return
*/
public int search(int element) {
for (int i = 0; i < elements.length; i++) {
if (element == elements[i]) {
return i;
}
}
return -1;
}
/**
* 非递归 二分查找,有则返回下标,否则返回-1
*
* @param element
* @return
*/
public int binarySearch(int element) {
int begin = 0;
int end = elements.length - 1;
int mid = (begin + end) / 2;
while (true) {
if (begin > end) {
return -1;
}
if (element == elements[mid]) {
return mid;
} else {
if (element < elements[mid]) {
end = mid - 1;
} else {
begin = mid + 1;
}
mid = (begin + end) / 2;
}
}
}
/**
* 递归 二分查找,有则返回下标,否则返回-1
*
* @param element
* @param begin
* @param end
* @return
*/
public int binarySearchByRecursion(int element, int begin, int end) {
int mid = (begin + end) / 2;
if (begin > end) {
return -1;
}
if (element < elements[mid]) {
return binarySearchByRecursion(element, begin, mid - 1);
} else if (element > elements[mid]) {
return binarySearchByRecursion(element, mid + 1, end);
} else {
return mid;
}
}