- 定义
给定以下情景,假设有一个有序的数组(从大到小排列),我们需要从中找出我们所需的目标元素并返回其索引。一般的思想是可以使用for循环进行遍历,直到找到目标元素然后返回其索引。但是这种方法的效率是十分低下的,如果我们的目标元素在最后一个,而我们的数组又十分长时,检索是十分耗时的。
- 应用与复杂度
- 蓝红边界划分
- java代码
public class BinarySearch {
public static void main(String[] args) {
int[] numArray = {1,3,5,6,8,9};
System.out.println(binarySearch(numArray, 5));
}
static int binarySearch(int[] numArray, int targetValue){
int left = -1;
int right = numArray.length;
while (left + 1 != right ){
int m = (left + right) / 2;
if (numArray[m] <= targetValue){
left = m;
}else right = m;
}
return left;
}
}
- python代码
def binary_search(list1: list, num):标签:二分,right,java,numArray,python,int,left From: https://www.cnblogs.com/sardine96/p/16989723.html
"""二分查找:输入数组和其中的数,返回其索引"""
left = -1
right = len(list1)
while left + 1 != right:
m = (left + right) // 2
if list1[m] <= num: # 条件可改变,这是蓝色左边区域
left = m
else:
right = m
return left # 根据需求返回左边界还是又边界