/**
* 二分查找已排序数组比较简单,有递归方法和迭代方法,实现分别如下:
* 他们的时间复杂度都为O(log n)
* @author Administrator
*
*/
public class SearchSortedArray {
/**
* 递归法
* @param array
* @param first
* @param last
* @param key
* @return
*/
public static int binnarySearch(int[] array, int first, int last, int key){
int index = -1;
int mid = (first + last)/2;
if(first > last)
index = -1;
else if(key == array[mid])
index = mid;
else if (key < array[mid])
index = binnarySearch(array, first, mid - 1, key);
else
index = binnarySearch(array, mid + 1, last, key);
return index;
}
/**
* 迭代方法
* @param array
* @param key
* @return
*/
public static int binnaryIteratorsearch(int[] array, int key){
int index = -1;
int first = 0;
int last = array.length - 1;
while(first <= last){
int mid = (first + last) / 2;
if(key == array[mid]){
index = mid;
break;
}
else if(key < array[mid]){
last = mid -1;
}else{
first = mid + 1;
}
}
return index;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] sortedArray = {4, 10, 50, 54, 78, 90, 100, 150, 178, 221};
int key = 90;
int indexInArray = binnarySearch(sortedArray, 0, sortedArray.length, key);
System.out.println("the index of key in sortedArray is: " + indexInArray);
int indexInArr = binnaryIteratorsearch(sortedArray, key);
System.out.println("the index of key in sortedArray is: " + indexInArr);
}
}
二分查找已排序数组
最新推荐文章于 2019-09-14 21:52:11 发布