C语言-数据结构 折半查找

news2024/10/12 9:51:13

        在折半查找中,刚开始学可能会在下标处产生困惑,例如奇数个长度的数组怎么处理,偶数个长度的数组怎么处理,不需要修改代码吗?并且下标我从1开始算和0开始算影响代码吗?其实都可以用一样的代码,产生困惑的原因我觉得是例子不够,虽然你感觉理解了思想,但是对于这些细节的地方还是容易头大,可以自行列举出奇数长度有序数组、偶数长度有序数组、折半算法代码修改为下标从0开始数的、1开始数的(数组0位置不存储元素)你会惊讶的发现原来都可以找到,这些例子在你的手动计算下都跑通的话,我想你就算掌握折半查找的算法了!

下面代码我分别列举出奇数个数数组、偶数个数数组以及两种折半函数从0开始计算和从1开始计算

#include <stdio.h>
// 二分查找函数
//Binary_Search1代码中下标从1开始查找,n为数组的最大索引=实际数组长度-1
int Binary_Search1(int* a, int n, int key) {
    int low, high, mid; // 定义低、高索引和中间索引
    low = 1;            // 设置低索引为1(假设数组从下标1开始)
    high = n;          // 设置高索引为n(即数组的最后一个元素的索引)
    // 进入循环,直到low超过high
    while (low <= high) {
        mid = (low + high) / 2; // 计算中间索引
        if (key < a[mid]) {     // 如果目标值小于中间元素
            high = mid - 1;     // 更新高索引为中间索引的前一个元素
        }
        else if (key > a[mid]) { // 如果目标值大于中间元素
            low = mid + 1;      // 更新低索引为中间索引的下一个元素
        }
        else {
            return mid;         // 返回找到的位置下标
        }
    }
    return -1; // 如果未找到目标值,返回0
}
//代码中下标从0开始查找,n为数组的最大索引=实际数组长度-1
int Binary_Search2(int* a, int n, int key) {
    int low, high, mid; // 定义低、高索引和中间索引
    low = 0;            // 设置低索引为1(假设数组从下标1开始)
    high = n;          // 设置高索引为n(即数组的最后一个元素的索引)
    // 进入循环,直到low超过high
    while (low <= high) {
        mid = (low + high) / 2; // 计算中间索引
        if (key < a[mid]) {     // 如果目标值小于中间元素
            high = mid - 1;     // 更新高索引为中间索引的前一个元素
        }
        else if (key > a[mid]) { // 如果目标值大于中间元素
            low = mid + 1;      // 更新低索引为中间索引的下一个元素
        }
        else {
            return mid;         // 返回找到的位置下标
        }
    }
    return -1; // 如果未找到目标值,返回0
}
int main() {
    // 初始化一个有奇数个元素的数组
    int jishu[] = { 0, 1, 16, 24, 35, 47, 59, 62, 73, 88, 99,100 };
    // 初始化一个有偶数个元素的数组
    int oshu[] = { 0, 1, 16, 24, 35, 47, 59, 62, 73, 88, 99 };
    // 调用二分查找函数并打印结果
    // 注意:传入的数组长度应为有效元素个数
    printf("下标从1开始查找\n");
    printf("奇数数组查找100结果为:%d\n", Binary_Search1(jishu, 11, 100));
    printf("偶数数组查找99结果为:%d\n", Binary_Search1(oshu, 10, 99));
    printf("奇数数组查找0结果为:%d\n", Binary_Search1(jishu, 11, 0));
    printf("偶数数组查找0结果为:%d\n", Binary_Search1(oshu, 10, 0));
    printf("\n下标从0开始查找\n");
    printf("奇数数组查找100结果为:%d\n", Binary_Search2(jishu, 11, 100));
    printf("偶数数组查找99结果为:%d\n", Binary_Search2(oshu, 10, 99));
    printf("奇数数组查找0结果为:%d\n", Binary_Search2(jishu, 11, 0));
    printf("偶数数组查找0结果为:%d\n", Binary_Search2(oshu, 10, 0));
    return 0; 
}

运行结果

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

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

相关文章

【含文档】基于Springboot+Vue的失物招领系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

如何替换OCP节点(一):使用oat | OceanBase应用实践

前言&#xff1a; OceanBase Cloud Platform&#xff08;简称OCP&#xff09;&#xff0c;是 OceanBase数据库的专属企业级数据库管理平台。 在实际生产环境中&#xff0c;OCP的安装通常是第一步&#xff0c;先搭建OCP平台&#xff0c;进而依赖OCP来创建、管理和监控我们的生…

docker升级mysql

一、首选备份原数据库所有数据 二、在Docker中查看正在运行的MySQL容器名称&#xff0c;可以使用以下命令&#xff1a; docker ps --filter "namemysql" 三、查看当前docker中正在运行mysql的版本 docker exec -it qgz-mysql mysql -V 可以看到当前运行的版本是8.…

数据传输——差错控制

一、检错纠错 1、通信链路不是完全理想的&#xff0c;在传输的过程中可能会产生比特差错。 2、误码率&#xff1a;传输错误的比特占所传输比特总数的比率。 3、检错&#xff1a;能自动发现差错。 4、纠错&#xff1a;不仅能发现差错而且能自动纠正差错。 5、码字(codeword…

Selenium打开外部应用程序的弹窗处理

问题 selenium自动化操作页面跳转到外部应用程序进行下载等操作&#xff0c;各种窗口处理方式无法解决 原因 该窗口属于浏览器窗口&#xff0c;与访问页面无关&#xff08;已经脱离页面操作层面&#xff09; 解决 selenium启动浏览器时&#xff0c;对浏览器进行相关窗口设…

Elasticsearch的安装与配置

注意&#xff1a;elasticsearch 禁止安装在/root路径下&#xff01; 1、创建用户组 groupadd elastic 2、创建用户 useradd es -d /home/es -g elastic echo es | passwd es --stdin 3、给新创建的用户进行授权 chown -R es:elastic /home/es chmod -R 775 /home/es 4…

sklearn机器学习实战——支持向量机四种核函数分类任务全过程(附完整代码和结果图)

sklearn机器学习实战——支持向量机四种核函数分类任务全过程&#xff08;附完整代码和结果图&#xff09; 关于作者 作者&#xff1a;小白熊 作者简介&#xff1a;精通python、matlab、c#语言&#xff0c;擅长机器学习&#xff0c;深度学习&#xff0c;机器视觉&#xff0c;目…

Nginx反向代理配置与负载均衡配置

简介&#xff1a;整理自黑马程序员苍穹外卖的第11节 nginx是什么&#xff1f; nginx的好处 nginx反向代理配置方式 nginx负载均衡的配置方式 nginx负责均衡策略

等保2.0测评 — WebSphere 中间件

查看版本信息&#xff1a; 登录websphere管理平台首页就能看到版本信息 可以进入\usr\IBM\WebSphere\AppServer\bin 下执行./versionInfo.sh查看版本 一、身份鉴别 a&#xff09;应对登录的用户进行身份标识和鉴别&#xff0c;身份标识具有唯一性&#xff0c;身份鉴别信息具有…

如何使用printf实现整齐美观的输出?

在编程中&#xff0c;尤其是在涉及控制台输出的应用场景中&#xff0c;我们需要让输出的信息更加整齐美观。printf 是 C 语言中用于格式化输出的强大工具之一。通过合理的格式化控制符&#xff0c;我们可以轻松地控制输出的宽度、对齐方式、填充字符等&#xff0c;从而达到整齐…

RiproV9.0主题wordpress主题免扩展可二开PJ版/WordPress博客主题Ripro全解密无后门版本

&#x1f525;&#x1f389; 全新RiPro9.0开源版发布 —— 探索无限可能&#x1f680;&#x1f310; 今天&#xff0c;我很高兴能与大家分享一个重磅资源——RiPro9.0开源版&#xff01;这不是一个普通的版本&#xff0c;而是一个经过精心打磨、全面解密的力作。&#x1f50d;…

使用KEIL5,不复位MCU,调试到程序运行到卡住之处

文章目录 前言步骤1步骤2步骤3步骤4步骤5 前言 经常有朋友在开发中遇到这样的窘境&#xff0c;当单片机程序运行异常以后&#xff0c;由于调试信息做得并不是很全面&#xff0c;导致相应的问题场景非常难分析。当时的你肯定会叹息道:“要是我一直插着仿真器就好了&#xff0c;…

【Concept Sliders】通过拖到滑块来精确控制特定图像特征

Concept Sliders 是一种用于扩散模型&#xff08;如 Stable Diffusion&#xff09;的LoRA 适配器&#xff0c;允许用户在图像生成过程中对特定概念进行精细控制。与依赖提示词生成图像的传统方法不同&#xff0c;Concept Sliders 通过引入可调整的“滑块”&#xff0c;用户可以…

前端读取本地表格数据

vue3tsvite 无后端提供数据的情况下&#xff0c;前端读取本地表格数据&#xff0c;并将数据放入页面结构中 展示在网页中 记得先安装npm install xlsx 目录 read_xlsx.ts import * as XLSX from xlsx; //将行,列转换 function transformSheets(sheets: { [key: string]: any })…

技术架构的演进之路

技术架构的演进之路 我们以电商系统的技术架构发展为例 文章目录 1. 单体架构2. 应用数据分离架构3. 应用服务集群架构4. 读写分离、主从分离架构5. 冷热分离架构6. 垂直分库架构7. 微服务架构8. 容器编排架构 1. 单体架构 在前期用户访问量很少的时候,没有对性能、安全等提出…

自然语言处理(NLP)论文数量的十年趋势:2014-2024

引言 近年来&#xff0c;自然语言处理&#xff08;NLP&#xff09;已成为人工智能&#xff08;AI&#xff09;和数据科学领域中的关键技术之一。随着数据规模的不断扩大和计算能力的提升&#xff0c;NLP技术从学术研究走向了广泛的实际应用。通过观察过去十年&#xff08;2014…

uniapp中添加colorUI的过程

1、先将colorUI文件粘到项目中去 2、common中添加两个文件 3、App文件中引入这两个文件

毕业设计选题:基于ssm+vue+uniapp的健身管理系统小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

2024年软件设计师中级(软考中级)详细笔记【5】软件工程基础知识下(分值10+)

第5章软件工程 目录 前言第5章 软件工程基础知识&#xff08;下&#xff09;5.5 系统测试5.5.1 系统测试与调试5.5.2 传统软件的测试策略5.5.5 测试方法5.5.5.1 黑盒测试5.5.5.2 白盒测试白盒测试McCabe度量法伪代码白盒测试McCabe 5.6 运行和维护知识【以背为主】5.6.2 系统维…

Asahi Linux通过大量变通方法实现在M系列Mac上支持AAA级游戏

如果您正在运行 Asahi Linux 并希望在您的 M 系列 Mac 上玩游戏&#xff0c;那么有一个好消息要告诉您&#xff0c;Asahi Linux 项目将继续推出新功能。 2 月份它在 Mac 上Apple Silicon 实现了OpenGL 4.6 和 OpenGL ES 3.2 兼容&#xff0c;现在又在游戏方面取得了进展。但您可…