数据结构算法-二分查找算法

引言

二分查找算法 我们应该也不陌生 就在分治法把他说得彻彻底底了 但分而治之算法思想 只是算法的部分 递归 和循环那个效率高呢 很明显循环 所以不必要多说 直接干

二分查找算法核心思路

二分查找算法是一种在有序数组中查找特定元素的搜索算法。
它的核心思路是每次查找都从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果目标元素大于或小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且同样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到目标元素。

记住只有顺序表和数组能用 当然二叉搜索树本来按照二分查找算法来的 这数据结构的规定 但算法只有连续并且有快速关键的索引 才是真正的快速 不是说链表不能实现 而是没有随机访问
可随机访问才有性价比

二分查找算法专区

// 函数定义:在给定的数组中查找特定的值  
int BinarySearch(void* arr, int size,int elementSize,  void *value ,int (*cmp)(void *,void*)) {  // 检查参数是否有效  if (!arr&&elementSize<=0 &&size>0 &&!value) {  // 如果数组为空、元素大小小于等于0、数组大小大于0且查找值为空,则返回-1  return -1;  }  // 初始化左边界和右边界  int left = 0;  int right = size - 1;  // 声明用于存储比较结果的变量  int ret;  // 当左边界小于等于右边界时,继续查找  while (left <= right) {  // 计算中间位置  int mid = left + (right - left) / 2;  // 使用cmp函数比较中间位置的值与查找值  ret = cmp((char*)arr + (mid * elementSize), value);  // 如果cmp返回0,说明找到了目标值,返回中间位置的索引  if (ret == 0) {  return mid;  } else if (ret > 0) {  // 如果cmp返回大于0,说明查找值大于中间位置的值,向左半部分继续查找  right = mid - 1;  } else {  // 否则,查找值小于中间位置的值,向右半部分继续查找  left = mid + 1;  }  }  // 如果循环结束仍未找到目标值,返回-1表示未找到  return -1;  
}// 定义一个比较函数,名为int_comp,它接受两个void类型的指针作为参数  
int int_comp(void* val1, void* val2) {  // 将void类型的指针val1转换为int类型的指针Element1  int* Element1 = (int*)val1;  // 将void类型的指针val2转换为int类型的指针Element2  int* Element2 = (int*)val2;  // 返回两个指针所指向的整数的差值。这里使用了指针解引用(*)操作符来获取指针指向的值。  return (*Element1 - *Element2);  
}// 定义一个比较函数,名为char_comp,它接受两个void类型的指针作为参数  
int char_comp(void* val1, void* val2) {  // 将void类型的指针val1转换为char类型的指针Element1  char* Element1 = (char*)val1;  // 将void类型的指针val2转换为char类型的指针Element2  char* Element2 = (char*)val2;  // 返回两个指针所指向的字符的ASCII码值的差值。这里使用了指针解引用(*)操作符来获取指针指向的字符,并通过ASCII码值的差值来表示字符的排序。  return (*Element1 - *Element2);  
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/234050.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

若依vue前端 报错error:0308010C:digital envelope routines::unsupported一步到胃的解决方法

第一步: 直接打开package.json 第二步: 直接替换scripts的内容为下面的内容 "scripts": {"dev": "SET NODE_OPTIONS--openssl-legacy-provider && vue-cli-service serve","build:prod": "SET NODE_OPTIONS--openssl-leg…

无源晶振电路中两端电阻和电容的作用

无源晶振电路中两端电阻和电容的作用是什么&#xff0c;今天晶发电子就详细讲讲&#xff0c;具体如下&#xff1a; 一、并联电阻的作用 配合IC内部电路组成负反馈、移相&#xff0c;使放大器工作在线性区。 并联降低谐振阻抗&#xff0c;使无源晶振易启动。 并联电阻取值大小…

【深度学习】语言模型与注意力机制以及Bert实战指引之二

文章目录 前言 前言 这一篇是bert实战的完结篇&#xff0c;准备中。

BeanPostProcessor 接口的概述

目录 作用与功能 主要方法 使用场景 注意事项 结论 作用与功能 BeanPostProcessor 是 Spring 框架提供的一个扩展接口&#xff0c;允许开发者在 Spring 容器的 bean 创建过程中&#xff0c;即实例化及初始化阶段&#xff08;依赖注入之后&#xff09;&#xff0c;插入自定…

StringBad的构造函数和解析函数

// pass by value-程序清单 12.3 vegnews.cpp // vegnews.cpp -- using new and delete with classes // compile with strngbad.cpp #include <iostream> using std :: cout: finclude "strngbad.h"void callmel (StringBad 6): // pass by reference void ca…

Excel_VBA实现:弹出对话框进行打开另存(附FileDialog 属性)

excel_vba可实现弹窗进行人机交互&#xff0c;本案例实现弹窗选择需要打开的excel文件&#xff0c;选择文件后打开该文件&#xff0c;然后弹窗提示该文件另存为路径及目录&#xff0c;代码如下&#xff1a; Sub 打开文件对话框() On Error Resume Next With Application.FileD…

【vCenter Converter】VMware vCenter Converter Standalone 理论, 下载与安装要求

目录 1. vCenter Converter 概述1.1 作用与特征&#xff08;1&#xff09;性能和可靠性&#xff08;2&#xff09;互操作性&#xff08;3&#xff09;管理 2. 下载 vCenter Converter Standalone3. 安装 vCenter Converter Standalone3.1 系统要求&#xff08;1&#xff09;支持…

邦芒支招:9个职场有效沟通技巧

在职场中&#xff0c;高效沟通是至关重要的。以下是一些建议&#xff0c;帮助你在工作职场中实现高效沟通&#xff1a; 1、明确目标&#xff1a;在开始沟通之前&#xff0c;确保你清楚自己的目标和期望结果。明确你的沟通目的&#xff0c;以便在沟通过程中保持专注和针对性。 2…

文件消失但是有占用内存的恢复方法

文件消失但占用内存是一个常见的问题&#xff0c;通常是由于文件系统错误或病毒攻击引起的。在这种情况下&#xff0c;文件虽然从目录结构中消失&#xff0c;但它们仍然占用存储空间。本文将分析这一问题的原因&#xff0c;并探讨解决该问题的几种方法。 文件消失但占用内存的原…

C++ opencv RGB三通道提升亮度

#include <iostream> #include <iomanip> #include<opencv2//opencv.hpp> using namespace std; using namespace cv; //函数adjustBrightness用于图片增加亮度 void adjustBrightness(cv::Mat& image, int targetBrightness) { // 获取图像的通道数…

android11-开机自启脚本

1. 编写myshell脚本 diff --git a/device/rockchip/rk356x/ok3568_r/myshell.sh b/device/rockchip/rk356x/ok3568_r/myshell.sh new file mode 100644 index 0000000000..c78b6d93bd --- /dev/nullb/device/rockchip/rk356x/ok3568_r/myshell.sh-0,0 1,4 #!/vendor/bin/shec…

抢先看!Salesforce Spring ‘24中的10个亮点功能!

Spring 24来临在即&#xff0c;Preview Orgs已上线。在Spring 24中&#xff0c;将会为管理员、开发人员和顾问带来更多新功能。在这片云计算的海洋里&#xff0c;一些亮点功能总能在Salesforce生态系统中引起强烈反响。本篇文章为学习者们盘点了Spring 24中的10个亮点功能&…

Vue项目搭建过程

Vue项目搭建过程 1、安装NodeJs 1.1 下载安装包 在 http://nodejs.cn/download/ 上下载64位安装包&#xff0c;然后进行安装&#xff0c;和普通软件的安装一样。 C:\Users\Administrator>node -v v16.13.1C:\Users\Administrator>npm -v 8.5.51.2 安装cnpm # 安装cn…

centos 7.x 安装docker最新版

1、查看centos版本 [rootlocalhost ~]# cat /etc/centos-release CentOS Linux release 7.9.2009 (Core) [rootlocalhost ~]# cat /etc/os-release NAME"CentOS Linux" VERSION"7 (Core)" ID"centos" ID_LIKE"rhel fedora" VERSION_…

C语言,数组循环哪家好,指针or下标?

日常工作中&#xff0c;我们经常会用到循环遍历数组元素。不考虑只能使用某一特定方式的情况下&#xff0c;有人喜欢用数组下标遍历&#xff0c;有人则喜欢用指针遍历。那么这两者是否有性能差异呢&#xff1f; 我们先来看两个例子&#xff1a; 代码一 /* a.c */ #include &…

【QML】QML复制文件或文件夹,显示进度,多线程复制

1. 效果 可以显示复制文件和文件夹的进度 复制文件&#xff1a; bool copyFileFunc(QString _from, QString _to);复制文件夹&#xff1a;bool copyDirectoryFiles(const QString &_from, const QString &_to);举例&#xff1a; //复制文件copyhelper.copyFileToDir(&…

#HarmonyOS:Column--Row布局

Column&Row组件的使用 Column表示沿垂直方向布局的容器。 Row表示沿水平方向布局的容器。 布局子元素在交叉轴上的对齐方式 Column容器内子元素在水平方向上的排列 HorizontalAlign.Start&#xff1a;子元素在水平方向左对齐。 HorizontalAlign.Center&#xff1a;子…

推荐12款好用的在线平面设计工具,让设计更简单

平面设计是图形表达和信息展示的重要手段&#xff0c;在游戏场景和角色造型、插画、广告制作等艺术设计领域有着重要的应用&#xff0c;如海报设计、包装设计等。 平面设计强调视觉传达&#xff0c;一般以图像、图形和文字等视觉元素为主要手段&#xff0c;通过排版、配色、构…

SpringBoot、Java AOP实现方式

SpringBoot、Java AOP实现方式 搭建项目环境 我这里直接使用Maven创建项目之后再pom.xml中导入包 Spring版本 如果你的版本有最新的&#xff0c;最简单的办法就是&#xff0c;将版本都换成统一的&#xff0c;因为发布时候都是每个版本统一发布的&#xff0c;如果出现不兼容的…

大模型讲座

盘古NLP大模型典型场景 千亿大模型训练难点和解决方案 训练状态不稳定&#xff08;经常训练中断等&#xff09; 解决1&#xff1a;对loss和梯度等多维状态实时监测。对数据、学习率、参数精度、模型梯度进行针对性调整和断点恢复。 调整学习率的代码如下。调整参数、梯度类似…