鱼C论坛

 找回密码
 立即注册
查看: 1564|回复: 1

[已解决]编程实现二分查找算法

[复制链接]
发表于 2023-10-28 11:31:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
c++
最佳答案
2023-10-28 11:32:11
二分查找算法是一种高效的搜索算法,适用于有序数组。它通过将待查找区间逐渐缩小一半来定位目标值。下面是C++中实现二分查找算法的示例代码:

  1. #include <iostream>
  2. #include <vector>

  3. int binarySearch(const std::vector<int>& nums, int target) {
  4.     int left = 0;
  5.     int right = nums.size() - 1;

  6.     while (left <= right) {
  7.         int mid = left + (right - left) / 2;
  8.         
  9.         if (nums[mid] == target) {
  10.             return mid;
  11.         } else if (nums[mid] < target) {
  12.             left = mid + 1;
  13.         } else {
  14.             right = mid - 1;
  15.         }
  16.     }

  17.     return -1;  // 目标值不存在
  18. }

  19. int main() {
  20.     std::vector<int> nums = {1, 3, 5, 7, 9};
  21.     int target = 5;
  22.     int result = binarySearch(nums, target);
  23.    
  24.     if (result != -1) {
  25.         std::cout << "目标值 " << target << " 在索引 " << result << " 处找到了。" << std::endl;
  26.     } else {
  27.         std::cout << "目标值 " << target << " 不存在。" << std::endl;
  28.     }
  29.    
  30.     return 0;
  31. }
复制代码


在上述代码中, binarySearch  函数接受一个有序整数数组  nums  和目标值  target  作为参数。它使用两个指针  left  和  right  来表示待查找区间的左右边界。

在每次循环中,算法计算中间位置  mid ,并将其与目标值进行比较。如果  nums[mid]  等于目标值,则找到了目标值,返回  mid 。

如果  nums[mid]  小于目标值,则目标值可能在  mid  的右侧,因此将  left  更新为  mid + 1 。

如果  nums[mid]  大于目标值,则目标值可能在  mid  的左侧,因此将  right  更新为  mid - 1 。

循环继续直到  left  大于  right ,此时目标值不存在于数组中,返回 -1。

在  main  函数中,我们定义了一个有序数组  nums  和目标值  target ,然后调用  binarySearch  函数进行查找。最后根据返回值判断是否找到目标值,并输出相应的结果。

以上是二分查找算法在C++中的实现。希望对你有帮助!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-28 11:32:11 | 显示全部楼层    本楼为最佳答案   
二分查找算法是一种高效的搜索算法,适用于有序数组。它通过将待查找区间逐渐缩小一半来定位目标值。下面是C++中实现二分查找算法的示例代码:

  1. #include <iostream>
  2. #include <vector>

  3. int binarySearch(const std::vector<int>& nums, int target) {
  4.     int left = 0;
  5.     int right = nums.size() - 1;

  6.     while (left <= right) {
  7.         int mid = left + (right - left) / 2;
  8.         
  9.         if (nums[mid] == target) {
  10.             return mid;
  11.         } else if (nums[mid] < target) {
  12.             left = mid + 1;
  13.         } else {
  14.             right = mid - 1;
  15.         }
  16.     }

  17.     return -1;  // 目标值不存在
  18. }

  19. int main() {
  20.     std::vector<int> nums = {1, 3, 5, 7, 9};
  21.     int target = 5;
  22.     int result = binarySearch(nums, target);
  23.    
  24.     if (result != -1) {
  25.         std::cout << "目标值 " << target << " 在索引 " << result << " 处找到了。" << std::endl;
  26.     } else {
  27.         std::cout << "目标值 " << target << " 不存在。" << std::endl;
  28.     }
  29.    
  30.     return 0;
  31. }
复制代码


在上述代码中, binarySearch  函数接受一个有序整数数组  nums  和目标值  target  作为参数。它使用两个指针  left  和  right  来表示待查找区间的左右边界。

在每次循环中,算法计算中间位置  mid ,并将其与目标值进行比较。如果  nums[mid]  等于目标值,则找到了目标值,返回  mid 。

如果  nums[mid]  小于目标值,则目标值可能在  mid  的右侧,因此将  left  更新为  mid + 1 。

如果  nums[mid]  大于目标值,则目标值可能在  mid  的左侧,因此将  right  更新为  mid - 1 。

循环继续直到  left  大于  right ,此时目标值不存在于数组中,返回 -1。

在  main  函数中,我们定义了一个有序数组  nums  和目标值  target ,然后调用  binarySearch  函数进行查找。最后根据返回值判断是否找到目标值,并输出相应的结果。

以上是二分查找算法在C++中的实现。希望对你有帮助!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 07:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表