一、思路分析
在一个有序序列arr[left,…,mid,…right]中查找一个元素item是否存在。
mid = (left+right)/2;用arr[mid]和item比较大小:
若item>arr[mid],则去序列右边查找item,
若item<arr[mid],则去序列左边查找item,
若item=arr[mid],则说明找到item,返回true。
二、代码
package com.Search;
/**
* 二分查找算法,只能在有序序列中使用
*
* @author chaixf
*
*/
public class BinarySearch {
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
System.out.println(binarySearch(arr, 0, arr.length - 1, 3));
}
/**
* 在arr数组的[left, right]中查找元素item
*
* @param arr
* @param left
* @param right
* @param item
* @return
*/
public static boolean binarySearch(int[] arr, int left, int right, int item) {
if (left < right) {
int mid = (left + right) / 2;
if (item > arr[mid]) {
return binarySearch(arr, mid + 1, right, item);
} else if (item < arr[mid]) {
return binarySearch(arr, left, mid - 1, item);
} else {
return true;
}
} else {
return false;
}
}
}