二分查找也称折半查找,仅用于有序的顺序表。一般情况下,表长为n的折半查找的判定树的深度和含有n个结点的完全二叉树的深度相同。为:log2(n+1)。
package com.haobi;
/*
* 二分查找
*/
public class BinarySearch {
public static void main(String[] args) {
int[] a = {1,2,3,5,6,8,9,10};
System.out.println("下标为:"+binarySearch(a, a.length, 9));
}
public static int binarySearch(int[] arr, int n, int target) {
int l = 0, r = n-1;//在[l...r]的范围里寻找target
while(l <= r) {//当l==r时,区间[l...r]依然是有效的
// int mid = (l+r)/2;//+操作容易产生溢出
int mid = l + (r-l)/2;//避免了整型溢出
if(arr[mid] == target) {
return mid;
}
if(target > arr[mid]) {
l = mid + 1;//target在[mid+1...r]中
}else {//target在[l...mid-1]中
r = mid-1;
}
}
return -1;
}
}