提到查找算法一般都会想到二分查找算法,而且面试官也喜欢问二分查找算法。
1、二分查找算法的基本条件是有序数组;
2、二分查找的主要思路就是设定两个指针start和end分别指向数组元素的收尾两端,然后比较数组中间结点arry[mid]和待查找元素x。如果待查找元素x小于中间元素,那么表明x在数组的前半段,那么将end=mid-1,如果x大于中间元素,那么表明该元素在数组的后半段,将start=mid+1;如果中间元素等于待查找元素x,那么返回mid的值。
3、二分查找的时间复杂度是O(log(n)),最坏情况下的时间复杂度是O(n)。
一般采用递归调用。
核心代码:
package com.company;
/**
* Created by wuguangzu on 14-10-4.
*/
public class BinarySearchTest {
//采用while循环,返回查找值
int binarySearch(int arr[], int x){
int start = 0;
int end = arr.length-1;
int mid;
while (start <= end){
mid = (start + end)/2;
if (x < mid){
end = mid-1;
}else if(x > mid){
start = mid+1;
}else {
return mid;
}
}
return -1;//错误
}
//采用递归调用,返回查找值得索引
int binarySearchRecursive(int arr[], int x, int start, int end){
if (end < start) return -1;//错误
int mid = (start + end)/2;
if (arr[mid] < x){
return binarySearchRecursive(arr, x, mid+1, end);
}else if (arr[mid] > x){
return binarySearchRecursive(arr, x, start, mid-1);
}else {
return mid;
}
}
}