二分查找python与java实现

  •   定义

  给定以下情景,假设有一个有序的数组(从大到小排列),我们需要从中找出我们所需的目标元素并返回其索引。一般的思想是可以使用for循环进行遍历,直到找到目标元素然后返回其索引。但是这种方法的效率是十分低下的,如果我们的目标元素在最后一个,而我们的数组又十分长时,检索是十分耗时的。

  •   应用与复杂度
  适用于正序排序,复杂度nlogn
 
  •   蓝红边界划分

 

  •  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):
"""二分查找:输入数组和其中的数,返回其索引"""
left = -1
right = len(list1)
while left + 1 != right:
m = (left + right) // 2
if list1[m] <= num: # 条件可改变,这是蓝色左边区域
left = m
else:
right = m
return left # 根据需求返回左边界还是又边界
posted @ 2022-12-17 22:17  Sardine96  阅读(36)  评论(0)    收藏  举报