程序员进阶之路:面试题与笔试题集锦(二)——二分查找的奥秘
在编程的世界里,二分查找算法是程序员必须掌握的一项技能。它是一种在有序数组中查找特定元素的算法。在二分查找中,我们从数组的中间元素开始搜索,根据目标值与中间值的大小关系,确定下一步的搜索方向。如果目标值小于中间值,我们只需在数组的左半部分查找;反之,我们则在右半部分进行搜索。这种策略极大地提高了搜索效率。
假设我们有一个有序整数数组A以及要查找的元素val,我们希望通过二分查找的方式确定val在数组中的位置。如果数组中存在该元素,我们返回其第一次出现的位置;如果不存在,则返回-1。以下是二分查找算法的Python实现:
```python
class BinarySearch:
def getPos(self, A, n, val):
对数组进行初始化并进行排序(虽然题目中给出的是有序数组,但这一步是为了确保代码的健壮性)
a = list(A)
a.sort() 确保数组是有序的
left, right = 0, n - 1 定义搜索的左右边界
while left <= right: 当左边界不大于右边界时,继续搜索
mid = (left + right) // 2 找到中间位置
if a[mid] == val: 如果中间位置的元素等于目标值
return A.index(val) 返回目标值第一次出现的位置(注意:这里假设数组中的元素可能重复)
elif a[mid] < val: 如果中间位置的元素小于目标值,目标值应在右半部分
left = mid + 1 更新左边界到中间位置的右边一个元素的位置
else: 如果中间位置的元素大于目标值,目标值应在左半部分
right = mid - 1 更新右边界到中间位置的左边一个元素的位置
return -1 如果未找到目标值,返回-1
```
测试代码:
```python
A = [1, 3, 5, 7, 9, 10]
print(BinarySearch().getPos(A, len(A), 6)) 输出应为元素6在数组A中的位置(如果存在的话),如果不存在则返回-1。
```
以上代码是对二分查找算法的详细解读和Python实现。二分查找是一种效率极高的搜索算法,熟练掌握它可以让你在面试或笔试中展现出卓越的编程能力。 |