C++二分查找(折半查找)算法实例详解

发布时间 - 2026-01-11 01:05:03    点击率:

本文实例讲述了C++二分查找(折半查找)算法。分享给大家供大家参考,具体如下:

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。

因此,折半查找方法适用于不经常变动而查找频繁的有序列表。

二分查找思想

首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;

否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。

重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

基本算法C语言实现代码:

int binary_search(int arr[], int len, int elem)
{
  int low = 0;
  int high = len - 1;
  while (low <= high)
  {
    int mid = (low + high) / 2;
    if (elem == arr[mid]){   //相等,返回mid
      return mid;
    }
    else if (elem > arr[mid]){
      low = mid + 1;  //元素比区间中间元素大,取区间中间元素的下一个元素作为新区间起始位置
    }
    else{
      high = mid - 1; //元素比区间中间元素小,取区间中间元素的上一个元素作为新区间结束位置
    }
  }
  return -1;
}

添加检测是否是已排好序数组的程序实例

#include <iostream>
using namespace std;
int binary_search(int arr[], int len, int elem)
{
  int low = 0;
  int high = len - 1;
  while (low <= high)
  {
    int mid = (low + high) / 2;
    if (elem == arr[mid]){
      return mid;
    }
    else if (elem > arr[mid]){
      low = mid + 1;
    }
    else{
      high = mid - 1;
    }
  }
  return -1;
}
//检测是否排好序
int is_sorted(int arr[], int len)
{
  int sorted = 1;
  for (int i = 0; i < len - 1; i++)
  {
    sorted = sorted && arr[i] <= arr[i + 1];
  }
  return sorted;
}
int main()
{
  int arr[] = { 1, 3, 5, 7, 9, 11, 12, 15, 18, 23, 25, 26 };
  int len = sizeof(arr) / sizeof(int);
  int pos;
  int sorted = is_sorted(arr, len);
  if (sorted)
  {
    pos = binary_search(arr, len, 26);
    cout << "pos = " << pos << endl;
  }
  system("pause");
}

运行结果:

pos = 11
请按任意键继续. . .

希望本文所述对大家C++程序设计有所帮助。


# C++  # 二分查找  # 折半查找  # 算法  # 查找算法之二分查找的C++实现  # C++二分查找算法实例  # C++ 中二分查找递归非递归实现并分析  # 二分查找算法在C/C++程序中的应用示例  # python中二分查找法的实现方法  # python实现二分查找算法  # Pythonic版二分查找实现过程原理解析  # Python如何实现的二分查找算法  # c++与python实现二分查找的原理及实现  # 升序  # 适用于  # 给大家  # 不存在  # 速度快  # 请按  # 所述  # 不成功  # 程序设计  # 讲述了  # 性能好  # sizeof  # pre  # 前一子表  # 后一子表  # pos  # class  # binary_search  # arr  # int 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 🚀拖拽式CMS建站能否实现高效与个性化并存?  如何登录建站主机?访问步骤全解析  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  北京的网站制作公司有哪些,哪个视频网站最好?  高防服务器租用首荐平台,企业级优惠套餐快速部署  高端智能建站公司优选:品牌定制与SEO优化一站式服务  iOS中将个别页面强制横屏其他页面竖屏  韩国服务器如何优化跨境访问实现高效连接?  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  如何在云服务器上快速搭建个人网站?  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  Laravel如何实现API资源集合?(Resource Collection教程)  Laravel如何使用Eloquent进行子查询  如何用狗爹虚拟主机快速搭建网站?  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  Laravel怎么使用Intervention Image库处理图片上传和缩放  JavaScript如何实现错误处理_try...catch如何捕获异常?  简单实现Android验证码  Laravel如何配置任务调度?(Cron Job示例)  Java遍历集合的三种方式  详解jQuery停止动画——stop()方法的使用  如何快速启动建站代理加盟业务?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  魔方云NAT建站如何实现端口转发?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  如何用PHP快速搭建高效网站?分步指南  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  如何在阿里云香港服务器快速搭建网站?  如何获取免费开源的自助建站系统源码?  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  php打包exe后无法访问网络共享_共享权限设置方法【教程】  Linux后台任务运行方法_nohup与&使用技巧【技巧】  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  JavaScript如何实现类型判断_typeof和instanceof有什么区别  php485函数参数是什么意思_php485各参数详细说明【介绍】  java ZXing生成二维码及条码实例分享  如何在万网自助建站平台快速创建网站?  手机软键盘弹出时影响布局的解决方法  Laravel如何实现本地化和多语言支持?(i18n教程)  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】  Bootstrap整体框架之CSS12栅格系统  Laravel用户密码怎么加密_Laravel Hash门面使用教程  微信小程序 canvas开发实例及注意事项