📅  最后修改于: 2023-12-03 15:10:19.945000             🧑  作者: Mango
二元搜索(Binary search)是一种使用分治法(Divide and conquer)策略的算法,用于在已排序的数组中进行搜索操作。对于一个有序数组,我们可以通过比较中间元素的值和目标值的大小关系来确定下一步查找的区间,从而将搜索的时间复杂度降至 O(logn)。
def binary_search(array, low, high, target):
if high >= low:
mid = (low + high) // 2
if array[mid] == target:
return mid
elif array[mid] > target:
return binary_search(array, low, mid - 1, target)
else:
return binary_search(array, mid + 1, high, target)
else:
return -1
public class BinarySearch {
public static int search(int[] array, int target) {
int low = 0, high = array.length - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (array[mid] == target) {
return mid;
} else if (array[mid] > target) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return -1;
}
}
int binary_search(int array[], int low, int high, int target) {
if (high >= low) {
int mid = (low + high) / 2;
if (array[mid] == target) {
return mid;
} else if (array[mid] > target) {
return binary_search(array, low, mid - 1, target);
} else {
return binary_search(array, mid + 1, high, target);
}
} else {
return -1;
}
}
二元搜索是一种高效的搜索算法,但前提是数组必须是有序的。在实际应用中,可以使用二元搜索来查找数据、寻找边界等。二元搜索在处理海量数据时表现出色,它的时间复杂度为 O(logn),具有很好的时间效率。