📅  最后修改于: 2023-12-03 14:39:31.427000             🧑  作者: Mango
二分查找,也称折半查找,是一种常用的查找算法。它的时间复杂度是O(log n),效率较高。对于有序的数列可以采用二分查找。二分查找的基本思想是将一组有序的数列进行分割(折半),从而缩小问题规模。由于每一次比较都使得问题规模减半,因此在最坏情况下,查找次数不会超过 log₂n 次。
def binary_search(arr, low, high, x):
if high >= low:
mid = (high + low) // 2
if arr[mid] == x:
return mid
elif arr[mid] > x:
return binary_search(arr, low, mid - 1, x)
else:
return binary_search(arr, mid + 1, high, x)
else:
return -1
public static int binarySearch(int[] arr, int low, int high, int x) {
if (high >= low) {
int mid = low + (high - low) / 2;
if (arr[mid] == x) {
return mid;
} else if (arr[mid] > x) {
return binarySearch(arr, low, mid - 1, x);
} else {
return binarySearch(arr, mid + 1, high, x);
}
} else {
return -1;
}
}
arr = [2, 3, 4, 10, 40]
x = 10
# 函数调用
result = binary_search(arr, 0, len(arr) - 1, x)
if result != -1:
print("元素在数组中的索引为", result)
else:
print("数组中不存在该元素")
输出:
元素在数组中的索引为 3
int arr[] = { 2, 3, 4, 10, 40 };
int x = 10;
// 函数调用
int result = binarySearch(arr, 0, arr.length - 1, x);
if (result == -1) {
System.out.println("元素不在数组中");
} else {
System.out.println("元素在数组中的索引为 " + result);
}
输出:
元素在数组中的索引为 3
二分查找是一种高效的查找算法,但是要求数据必须是有序的,这一点需要在使用时注意。除此之外,我们还可以对二分查找进行优化,比如使用循环方式实现,或者在需要查找的数据量很小的情况下使用线性查找,避免了递归过程中的开销。