代码 | 性能 | 小结 |
代码
python实现如下:
def binary_search(list,item):
low = 0
high = len(list) - 1
while low<=high:
mid = (low+high)
guess = list[mid]
if guess==item:
return mid
if guess>item:
high = mid-1
else:
low = mid+1
return None
func = lambda x:x%2!=0
my_list = list(filter(func,range(0,10)))
print(my_list)
print(bin_search(my_list,2))
print(bin_search(my_list,5))
[1, 3, 5, 7, 9]
None
2
java代码实现如下:
public class Bin_Search {
public static void main(String[] args) {
int[] src = new int[] {1, 3, 5, 7, 8, 9};
System.out.println(binarySearch(src, 5));
System.out.println(binarySearch(src,3,0,src.length-1));
}
/**
* * 二分查找算法 * *
*
* @param srcArray
* 有序数组 *
* @param des
* 查找元素 *
* @return 数组下标,没找到返回-1
*/
public static int binarySearch(int[] srcArray, int des){
int low = 0;
int high = srcArray.length-1;
while(low <= high) {
int middle = low + (high-low)/2;
if(des == srcArray[middle]) {
return middle;
}else if(des <srcArray[middle]) {
high = middle - 1;
}else {
low = middle + 1;
}
}
return -1;
}
/**
*二分查找特定整数在整型数组中的位置(递归)
*@param dataset
*@param data
*@parambeginIndex
*@paramendIndex
*@return index
*/
public static int binarySearch(int[] dataset,int data,int beginIndex,int endIndex){
int midIndex = (beginIndex+endIndex)/2;
if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex){
return -1;
}
if(data <dataset[midIndex]){
return binarySearch(dataset,data,beginIndex,midIndex-1);
}else if(data>dataset[midIndex]){
return binarySearch(dataset,data,midIndex+1,endIndex);
}else {
return midIndex;
}
}
}
性能:
时间复杂度:表示最糟情况下的运行时间
二分查找 | 简单查找 | 快速排序 | 选择排序 | 旅行商问题 |
对数时间 | 线性时间 | 较快 | 较慢 | 无法优化 |
O(logN) | O(N) | O(n*logN) | O(n^2) | O(N!) |
几种函数比较:
小结:
1 算法要么快,要么解决有趣的问题,要么兼之。
2 图跟踪游戏用户的AI系统;k最近邻编写推荐算法;如何识别在有限时间不可解的问题,np完全问题找到近 似答案。
3 二分查找应用到网站核实是否存在用户名和密码等场景。
4 大 O表示法:表示算法运行时间;运行时间随列表如何增长;表示最坏的情形。