二分查找法
事件复杂度O(log2 n)【以2为底,n的对数】,也可以当做O(logn)级别的查找算法
code:(非递归实现)
package DataStr_Find;
public class BinarySearch {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,8,9,10};
int result = binarySearch(arr, 1);
if(result == -1)
System.out.println("没有找到");
else
System.out.println("该元素下标是:"+result);
}
/**
* 二分查找法,在有序数组arr中查找target,
* @param arr 待查找的数组
* @param target 目标元素
* @return 如果找到target,返回相应索引下标,否则返回-1
*/
private static int binarySearch(int[] arr, int target) {
//在arr[left...right]之中查找target
int left = 0, right = arr.length-1;
while(left <= right) {
int mid = (left+right) / 2;
if(arr[mid] == target)
return mid;
if(target < arr[mid])
//在arr[left...mid-1]之中查找target
right = mid-1;
else
//在arr[mid+1...right]之中查找target
left = mid+1;
}
return -1;
}
}