采用分治法求含n个实数序列中的最大元素和次大元素(C语言)

目录

实验内容:

实验过程:

1.算法设计

2.程序清单

3.复杂度分析

4.运行结果


实验内容

设计一个程序,采用分治法求含n个实数序列中的最大元素和次大元素,并分析算法的时间复杂度。

实验过程

1.算法设计

该程序采用递归分治策略,以下是算法设计思路的详细描述:

核心函数solve():

  • 基本情况:当数组只有一个元素(low == high)时,直接将该元素赋值给max1,将一个较小常数(如-1000)赋值给max2作为初始次大值。若只有两个元素(low == high - 1),则直接比较并返回两元素的最大值和最小值作为最大值和次大值。
  • 递归分割:对于包含三个或更多元素的数组,计算中间下标mid,将数组分为左右两个子区间:a[low..mid]和a[mid+1..high]。
  • 递归调用:对左右子区间分别调用solve()函数,分别得到左右区间的最大值lmax1和rmax1以及次大值lmax2和rmax2。
  • 合并结果:比较左右子区间的最大值lmax1和rmax1,将较大者赋值给全局最大值max1。接着,从剩余元素(包括左右区间的次大值及未被选为最大值的另一区间最大值)中找出最大值,将其赋值给全局次大值max2。

辅助函数:

  1. max(int m, int n):比较两个整数,返回较大的值。
  2. min(int m, int n):比较两个整数,返回较小的值。

主函数main():

  1. 获取用户输入:首先提示用户输入整数数组的元素个数n,然后根据n读取相应的整数元素,依次存入数组a中。
  2. 调用solve()函数:传入数组a、起始下标low(设为0)、结束下标high(设为n-1)以及两个引用变量max1和max2用于接收最大值和次大值。
  3. 输出结果:在solve()函数执行完毕后,输出最大值max1和次大值max2。

 2.程序清单

#include<stdio.h>
#include <climits>
int max(int m, int n) {
    return (m > n) ? m : n;
}

int min(int m, int n) {
    return (m < n) ? m : n;
}
void solve(int a[],int low,int high,int &max1,int &max2){
	if(low==high){
		max1=a[low];
		max2=-1000;
	}else if(low==high-1){
		max1=max(a[low],a[high]);
		max2=min(a[low],a[high]);
	}else{
		int mid=(low+high)/2;
		int lmax1,lmax2;
		solve(a,low,mid,lmax1,lmax2);//左区间求lmax1,lmax2
		int rmax1,rmax2;
		solve(a,mid+1,high,rmax1,rmax2);//右区间求rmax1,rmax2
		if(lmax1>rmax1){
			max1=lmax1;
			max2=max(lmax2,rmax1);
		}else{
			max1=rmax1;
			max2=max(lmax1,rmax2);
		}
	}
}

int main(){
	int n;
	printf("请输入元素的个数:");
	scanf("%d",&n);
	int a[100];
	printf("请输入元素:\n");
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	int max1,max2;
	solve(a,0,n-1,max1,max2);
	printf("最大元素为:%d\n",max1);
	printf("次大元素为:%d\n",max2);
	return 0;
}

3.复杂度分析

(1)时间复杂度

时间复杂度主要是调用solve函数

(2)空间复杂度

实验查找最大值和次大值是在一个一维数组的存储并得出出结果,故采用分治法求含n个实数序列中的最大元素和次大元素的算法空间复杂度为O(n)。

4.运行结果

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何增强Java GCExcel API 的导入和导出性能

前言 GrapeCity Documents for Excel (以下简称GcExcel) 是葡萄城公司的一款服务端表格组件&#xff0c;它提供了一组全面的 API 以编程方式生成 Excel (XLSX) 电子表格文档的功能&#xff0c;支持为多个平台创建、操作、转换和共享与 Microsoft Excel 兼容的电子表格&#xf…

[计算机效率] 网站推荐:图片编辑类

4.4 图片编辑类 在数字化时代&#xff0c;图片编辑已成为我们生活和工作中不可或缺的一部分。为了帮助大家更高效、更专业地进行图片编辑&#xff0c;这里推荐一系列优质的在线图片编辑网站。 这些网站不仅拥有直观易用的操作界面&#xff0c;更提供了丰富的编辑功能和素材资源…

jenkins 部署 vue 项目

jenkins 部署 vue 项目 环境 系统&#xff1a;CentOS7.9 Jenkins&#xff1a;最新LTS版本 nginx: 1.24.x gitLab: 打包机&#xff1a;jenkins所在服务器 目标机器&#xff1a;nginx所在服务器 jenkins部署配置 关键脚本 #node -v #已经安装node_module就无需执行install安…

快排非递归与计数排序

感谢大佬的光临各位&#xff0c;希望和大家一起进步&#xff0c;望得到你的三连&#xff0c;互三支持&#xff0c;一起进步 个人主页&#xff1a;LaNzikinh-CSDN博客 收入专栏:初阶数据结构_LaNzikinh篮子的博客-CSDN博客 文章目录 前言一.快速排序非递归二.数据结构栈与内存栈…

【埋点探针】微信小程序SDK安装

一、下载微信小程序SDK埋点代码 选择Wechat&#xff0c;复制sdk代码 在项目根目录下&#xff0c;创建sdk文件&#xff0c;webfunny.event.js 二、在app.js文件中&#xff0c;引入埋点SDK代码 首先引入sdk代码 require("./webfunny.event.js")引入兼容代码&#x…

职业技能鉴定服务中心(新闻系统+证书查询系统)

后端采用ThinkPHP8&#xff0c;最新tp框架 前端采用divcss布局 数据库采用MySQL 采用三种技术实现新闻系统和证书查询系统 源码&#xff1a;git clone https://gitee.com/3539949703/certificate-website.git 效果图如下&#xff1a;

一套在线画图工具(突突图 Procviz)

突突图(Procviz)是一款面向跨平台作图平台。支持流程图、思维导图、框架图、组织架构图、ER图、网络拓扑图等。实现了多团体同时协作&#xff0c;实时同步&#xff0c;解决跨地域合作作图的问题。平台提供了丰富的模板和素材库&#xff0c;轻松完成作图&#xff0c;效率翻倍。 …

docker pull速度慢解决办法

在使用 Docker 时遇到拉取镜像速度慢的问题&#xff0c;可以使用国内的镜像源可以提高下载速度。 使用阿里镜像加速器 Docker 配置文件位于 /etc/docker/daemon.json。如果文件不存在&#xff0c;可以手动创建它。将以下内容添加到配置文件中&#xff1a; 整体复制执行命令&…

【设计模式】单例模式|最常用的设计模式

写在前面 单例模式是最常用的设计模式之一&#xff0c;虽然简单&#xff0c;但是还是有一些小坑点需要注意。本文介绍单例模式并使用go语言实现一遍单例模式。 单例模式介绍 简介 单例模式保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。 使用场景&#…

web自动化系列-selenium的3种弹框操作(十二)

在进行功能测试时 &#xff0c;经常会遇到出现各种的弹出的提示 &#xff0c;比如删除数据给出提示 、做某个操作时也会弹框给出一些友好提示 &#xff0c;因为这些弹框都是做web操作时的一些常用组件 &#xff0c;所以&#xff0c;selenium就不得不支持这些组件 。 1.弹框介绍…

HarmonyOS开发环境搭建 移动开发 鸿蒙开发 ArkTS

&#x1f4dc;目录 &#x1f4a1; 环境搭建 &#x1f680;安装nodejs &#x1f935;安装ohpm &#x1f354;安装SDK &#x1f4a5;Emulator安装 &#x1f336;️新建ArkTs项目 &#x1f3c6;️ArkTS语言 ✨️基本语法 &#x1f388; 声明式UI描述 &#x1f371;组件 …

【C语言__函数栈帧的创建和销毁__复习篇9】

目录 前言 一、知识补充 二、分析创建和销毁的过程 三、前言问题回答 前言 本篇主要讨论以下问题&#xff1a; 1. 编译器什么时候为局部变量分配的空间 2. 为什么局部变量的值是随机的 3. 函数是怎么传参的&#xff0c;传参的顺序是怎样的 4. 形参和实参是什么关系 5. 函数…

【Linux 进程间通信】管道(三)

文章目录 1.管道的五种特征2.管道的四种情况 1.管道的五种特征 ①&#x1f34e;匿名管道只能用于有血缘关系的进程之间进行通信&#xff08;爷孙进程之间可以进行通信&#xff09;&#xff0c;常用于父子之间进行通信&#xff1b; ②&#x1f34e;管道内部&#xff0c;自带进…

若依后台管理系统(ruo-web)修改主题色,更改颜色值 (2024-04-22)

1、修改文件 setting.js 2、修改的文件路径 ruoyi-web/src/store/modules/setting.js 3、默认主题颜色 #409EFF&#xff0c;改新的颜色值&#xff0c;刷新就好了 4、修改主题颜色 还可以用户自己更换&#xff0c;但这个更换只是存储在浏览器中&#xff0c;清除缓存之后还是…

【ARM 裸机】C 语言 led 驱动

前面刚学习了汇编 led 驱动的编写和验证&#xff0c;现在开始就要进入 C 语言 led 驱动编写与验证了 ! 1、C 语言运行环境构建 1.1、设置处理器模式 使 6ULL 处于 SVC 模式下&#xff0c;之前已经提到了处理器的九种模式&#xff0c;参考&#xff1a;【ARM 裸机】汇编 led 驱…

【Linux系统编程】第六弹---权限的概念

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、什么是权限 2、权限的本质 3、Linux中的用户 4、Linux中文件的权限 4.1、文件访问者的分类(角色) 4.2、文件类型和访问权…

计算机经典黑皮书分享

计算机经典黑皮书是一套计算机科学丛书&#xff0c;其中包含了多本计算机科学领域的经典教材 提供了全面的知识体系&#xff1a;黑皮书涵盖了计算机科学的多个领域&#xff0c;如计算机组成与设计、操作系统、数据库、人工智能等。它们深入浅出地介绍了相关领域的基本概念、原…

WAF攻防-漏洞发现协议代理池GobyAwvsXray

知识点 1、Http/s&Sock5协议 2、Awvs&Xray&Goby代理 3、Proxifier进程代理使用 4、Safedog&BT&Aliyun防护在漏洞发现中&#xff0c;WAF会对三个方向进行过滤拦截&#xff1a; 1、速度频率问题&#xff08;代理池解决&#xff09; 2、工具的指纹被识别&am…

从零开始学 langchain 之搭建最小的 RAG 系统

RAG 可以说是 23 年以来到现在&#xff0c;最为火热的大模型应用技术了&#xff0c;很多人都有了很多经典的研究。而对于新人来说&#xff0c;有些代码十分复杂&#xff0c;导致只看表象并不理解其原理。今天&#xff0c;就利用 langchain 和大家一起搭建一个最简单的 RAG 系统…

JAVA学习笔记27(异常)

1.异常 ​ *异常(Exception) ​ *快捷键 ctrl alt t 选中try - catch ​ *如果进行了异常处理&#xff0c;那么即使出现了异常&#xff0c;程序可以继续执行 1.1 基本概念 ​ *在Java语言中&#xff0c;将程序执行中发生的不正常情况称为"异常"(开发过程中的语…