目录
个人主页:https://blog.csdn.net/ygb_1024?spm=1010.2135.3001.5421
欢迎志同道合者一起交流学习,我的QQ:94509325/微信号
二分查找(Binary search)是一种非常高效的查找算法,主要用于在有序数组中查找特定元素的位置。具体应用包括以下几种:
1、验证存在性:对于有序数组,可以使用二分查找来确定某个元素是否存在,如果存在则返回其索引,否则返回-1。
2、查找边界值:对于有序数组中包含重复元素的情况,可以使用二分查找来确定某个元素第一次或最后一次出现的位置。通过修改二分查找的判断条件,可以实现这个功能。
3. 查找插入位置:如果要向有序数组中插入一个元素,可以使用二分查找来确定插入的位置。如果元素已经存在,则返回其索引;如果元素不存在,则返回应该插入的位置。
4. 查找最接近的元素:对于有序数组,可以使用二分查找来找到最接近某个给定值的元素。通过不断缩小查找范围,并记录最接近的元素,最终可以找到目标元素。
总的来说,二分查找适用于在有序数组中进行查找、插入和判断等操作,可以快速确定元素的位置,提高查找效率。
1、二分查找(验证存在性):
1-1、Python:
- # 1.问题描述:
- # 给定一个排序的整数数组(升序或降序)和一个要查找的目标整数target,查找到target第1次出现的下标(从0开始),如果target不存在于数组中,返回-1.
- # 2.问题示例:
- # 输入数组[3,5,6,8,10,10,11,24]和目标整数10,输出其所在的位置为4,即第1次出现在第4个位置;输入数组[3,5,6,8,10,10,11,24]和目标整数7,输出-1,即没有出现过7,返回-1.
- # 3.代码实现:
- class Solution:
- # 参数nums: 整数数组
- # 参数target: 目标整数
- # 返回值: 目标整数的下标
- def binarySearch(self, nums, target):
- return nums.index(target) if target in nums else -1 # 若目标整数存在于整数数组中,则返回目标整数所对应的下标;反之,则返回-1.
- # 主函数
- if __name__ == '__main__':
- solution =Solution() # 注意大小写
- nums = [3, 5, 6, 8, 10, 10, 11, 28, 24, 1]
- target = 7
- targetIndex = solution.binarySearch(nums, target)
- print("输入:nums=", nums, " ", "target=", target)
- print("输出:", targetIndex)
- # 4.运行结果:
- # 输入:nums= [3, 5, 6, 8, 10, 10, 11, 28, 24, 1] target= 7
- # 输出: -1
1-2、VBA:
- rem 自定义函数binarySearch,功能:实现二分查找
- Function binarySearch(nums As Variant, target As Integer) As Integer
- Dim left As Integer, right As Integer, mid As Integer
- left = LBound(nums)
- right = UBound(nums)
-
- While left <= right
- mid = (left + right) \ 2 ' 整除,避免浮点数
- If nums(mid) = target Then
- binarySearch = mid ' 找到目标,返回下标
- Exit Function
- ElseIf nums(mid) < target Then
- left = mid + 1 ' 在右侧继续搜索
- Else
- right = mid - 1 ' 在左侧继续搜索
- End If
- Wend
-
- binarySearch = -1 ' 没有找到,返回-1
- End Function
- rem 执行过程,功能:调用自定义函数binarySearch,并在立即窗口中输出结果
- Sub TestRun()
- Dim nums As Variant
- Dim target As Integer
- Dim targetIndex As Integer
-
- ' 定义并初始化数组
- nums = Array(3, 5, 6, 8, 10, 10, 11, 24)
- target = 7
-
- ' 调用 binarySearch 函数
- targetIndex = binarySearch(nums, target)
-
- ' 输出结果
- Debug.Print "输入:nums="; Join(nums, ", ") & " target=" & target
- Debug.Print "输出:" & targetIndex
- End Sub
- rem 输入:nums=3, 5, 6, 8, 10, 10, 11, 24 target=7
- rem 输出:-1
注意:1-2中的代码需粘贴到你的VBA编辑器中,按F5执行TestRun程序,结果会展示在立即窗口中。
2、相关文章:
2-3、Python-VBA编程500例-005-02(入门级)
Python算法之旅:http://iyenn.com/rec/1699032.html?spm=1001.2014.3001.5502
个人主页:https://blog.csdn.net/ygb_1024?spm=1010.2135.3001.5421
欢迎志同道合者一起交流学习,我的QQ:94509325/微信号:

遨游码海,我心飞扬
微信名片


评论记录:
回复评论: