java 二分法查找

二分法查找原理

使用二分法查找时需要以下两个条件:没有重复元素,已经排好顺序

假设给定一组排好序且没有重复元素的数字,要从这些数字中快速找到x所在的位置,可以从这组数字的中间位置开始找,如果当前值与x相等,则查找成功,如果小于x则从后半段的中间位置继续找,如果大于x则从前半段的中间位置继续寻找,直到找到x所在的位置

例如一个数组里面的元素有: 1, 3, 4, 5, 8, 12, 45, 78
快速找到45对应的下标值
第一次:取得数组的中间位置的值5,5小于45,所以继续从后半段开始找,后半段的元素是8,12,45,78
第二次:取得数组后半段元素中间位置的值12,12小于45,继续查找,第三次取得后半段元素中间位置值为45,返回对应的索引值

public class BinarySearch {
	public static void main(String[] args) {
		int[] arr = { 1, 3, 4, 5, 8, 12, 45, 78 };
		int result = binarySearch(arr, 45);
		System.out.println(result);

	}

	public static int binarySearch(int[] arr, int destElement) {
		//定义两个指针变量
		int begin = 0;
		int end = arr.length - 1;

		while (begin <= end) {
			int middle = (begin + end) / 2;
			System.out.println("begin" + begin + "end" + end + "middle" + middle);
			if (arr[middle] == destElement) {
				return middle;
			} else if (arr[middle] > destElement) {
				//说明destElement在数组的前半部分,end指针从middle处前移一位,begin指针不变
				end = middle - 1;
			} else if (arr[middle] < destElement) {
				//说明destElement在数组的后半部分,begin指针从middle处后移一位,end指针不变
				begin = middle + 1;
			}

		}
                //如果找不到,返回-1
		return -1;
	}
}

 参考:http://www.monkey1024.com/javase/474

你可能感兴趣的:(JavaSE)