首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Python-VBA编程500例-028(入门级)

  • 25-03-03 04:44
  • 2926
  • 8179
blog.csdn.net

目录

1、经典二分查找:

1-1、Python:

1-2、VBA:

2、相关文章:

Python算法之旅:Myelsa的Python算法之旅(高铁直达)-CSDN博客

个人主页:非风V非雨-CSDN博客

欢迎志同道合者一起交流学习,我的QQ:94509325/微信

        经典二分查找算法(Classic Binary Search Algorithm)(也称为折半查找算法),是一种在有序数组中查找某一特定元素的搜索算法。它要求序列必须有序,然后通过每次比较数组中间元素与目标值,将搜索范围缩小一半,直到找到目标元素或搜索范围为空。二分查找的时间复杂度是O(logn),这意味着即使在非常大的数据集中,查找效率也非常高。

1、字典查找:在计算机科学中,二分查找常用于字典查找。例如,如果你有一个按字母顺序排列的单词列表,并且你想找到一个特定的单词,你可以使用二分查找来快速找到它。

2、电话簿查找:如果你想在一个按姓氏排序的电话簿中找到一个特定的人,你也可以使用二分查找。

3、文件查找:在文件系统中,二分查找可以用于查找具有特定名称或属性的文件。

4、数据库查询优化:在数据库中,二分查找可以用于优化查询操作。例如,如果你想在一个大型数据库中找到一个特定的记录,你可以使用二分查找来快速找到它。

5、排序和搜索问题:在排序和搜索问题中,二分查找被广泛使用。例如,在归并排序算法中,二分查找用于将数组分成两半。

6、近似匹配:在某些情况下,可能需要找到一个近似匹配而不是精确匹配。在这种情况下,可以使用变体的二分查找,例如,斐波那契查找。

7、机器学习:在机器学习中,二分查找可以用于优化算法,例如,在线学习算法。

8、编译器和解释器:在编译器和解释器中,二分查找可以用于符号表查找和词法分析。

9、数值计算:在数值计算中,二分查找可以用于求解方程和优化算法。

1、经典二分查找:
1-1、Python:
  1. # 1.问题描述:
  2. # 在一个排序整型数组中找目标整数,若存在,则返回目标整数在排序整型数组中的位置;反之,则返回-1.
  3. # 2.问题示例:
  4. # 输入排序整型数组int_arr = [3, 5, 6, 8, 10, 10, 11, 24]和目标整数target_int = 10,输出5;
  5. # 输入排序整型数组int_arr = [3, 5, 6, 8, 10, 10, 11, 24]和目标整数target_int = 18,输出-1.
  6. # 3.代码实现:
  7. class Solution:
  8. # 定义一个名为find_position的方法,该方法接受一个整型数组int_arr和一个整型目标值target_int作为参数
  9. def find_position(self, int_arr, target_int):
  10. # 如果整型数组int_arr的长度为0,即数组为空,直接返回-1表示目标值不存在于数组中
  11. if len(int_arr) == 0:
  12. return -1
  13. # 初始化搜索的起始位置为数组的第一个元素索引0
  14. start = 0
  15. # 初始化搜索的结束位置为数组的最后一个元素索引,即数组长度减1
  16. end = len(int_arr) - 1
  17. # 当起始位置小于等于结束位置时,说明搜索区间内还有元素,继续搜索
  18. # 注意,此处兼容了排序整型数组中只有一个元素的情况
  19. while start <= end:
  20. # 计算数组中间位置的索引
  21. mid = start + (end - start) // 2
  22. # 如果中间位置上的元素等于目标值,返回该中间位置索引
  23. if int_arr[mid] == target_int:
  24. return mid
  25. # 如果中间位置上的元素小于目标值,说明目标值在右侧,更新起始位置为中间位置的下一个索引
  26. elif int_arr[mid] < target_int:
  27. start = mid + 1
  28. # 如果中间位置上的元素大于目标值,说明目标值在左侧,更新结束位置为中间位置的前一个索引
  29. else:
  30. end = mid - 1
  31. # 如果循环结束仍未找到目标值,返回-1表示目标值不存在于数组中
  32. return -1
  33. # 主函数
  34. if __name__ == '__main__':
  35. # 初始化一个排序整型数组
  36. int_arr = [3, 5, 6, 8, 10, 10, 11, 24]
  37. # 设置要查找的目标值
  38. target_int = 10
  39. # 创建Solution类的实例
  40. solution = Solution()
  41. # 打印输入的数组
  42. print("输入:", int_arr)
  43. # 调用find_position方法查找目标值在数组中的位置,并打印结果
  44. print("输出:", solution.find_position(int_arr, target_int))
  45. # 4.运行结果:
  46. # 输入: [3, 5, 6, 8, 10, 10, 11, 24]
  47. # 输出: 5
1-2、VBA:
  1. Rem 自定义函数,功能:经典二分查找
  2. Function FindPosition(int_arr As Variant, target_int As Integer) As Integer
  3. ' 定义变量
  4. Dim start As Integer
  5. Dim end_pos As Integer
  6. Dim mid As Integer
  7. Dim arrLength As Integer
  8. ' 检查数组是否为空
  9. If IsEmpty(int_arr) Then
  10. FindPosition = -1
  11. Exit Function
  12. End If
  13. ' 获取数组长度
  14. arrLength = UBound(int_arr) - LBound(int_arr) + 1
  15. ' 初始化搜索的起始和结束位置
  16. start = LBound(int_arr)
  17. end_pos = UBound(int_arr)
  18. ' 当起始位置小于等于结束位置时,继续搜索
  19. While start <= end_pos
  20. ' 计算中间位置
  21. mid = start + (end_pos - start) \ 2
  22. ' 如果找到目标值,返回其位置
  23. If int_arr(mid) = target_int Then
  24. FindPosition = mid
  25. Exit Function
  26. ' 如果中间值小于目标值,搜索右侧
  27. ElseIf int_arr(mid) < target_int Then
  28. start = mid + 1
  29. ' 如果中间值大于目标值,搜索左侧
  30. Else
  31. end_pos = mid - 1
  32. End If
  33. Wend
  34. ' 如果循环结束仍未找到目标值,返回-1
  35. FindPosition = -1
  36. End Function
  37. Rem 执行过程,功能:通过调用自定义函数FindPosition,实现经典二分查找,在立即窗口中输出结果
  38. Sub TestRun()
  39. ' 定义变量
  40. Dim int_arr As Variant
  41. Dim target_int As Integer
  42. Dim position As Integer
  43. ' 初始化一个排序整型数组
  44. int_arr = Array(3, 5, 6, 8, 10, 10, 11, 24)
  45. ' 设置要查找的目标值
  46. target_int = 10
  47. ' 调用FindPosition函数查找目标值在数组中的位置
  48. position = FindPosition(int_arr, target_int)
  49. ' 打印结果
  50. Debug.Print "输入: [" & Join(int_arr, ", ") & "]"
  51. Debug.Print "输出: " & position
  52. End Sub
  53. '结果输出:
  54. '输入: [3, 5, 6, 8, 10, 10, 11, 24]
  55. '输出: 5

注意:1-2中的代码需粘贴到你的VBA编辑器中,按F5执行TestRun程序,在立即窗口中输出结果。

2、相关文章:

2-1、Python-VBA编程500例-026(入门级) 

2-2、Python-VBA编程500例-027(入门级) 

2-3、Python-VBA编程500例-029(入门级) 

2-4、Python-VBA编程500例-030(入门级) 

Python算法之旅:Myelsa的Python算法之旅(高铁直达)-CSDN博客
个人主页:非风V非雨-CSDN博客
欢迎志同道合者一起交流学习,我的QQ:94509325/微信:

文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览60120 人正在系统学习中
遨游码海,我心飞扬
微信名片
注:本文转载自blog.csdn.net的神奇夜光杯的文章"https://myelsa1024.blog.csdn.net/article/details/137240867"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top