二路归并排序的算法设计和复杂度分析(C语言)

目录

实验内容:

实验过程:

1.算法设计

2.程序清单

3.运行结果

4.算法复杂度分析


实验内容

二路归并排序的算法设计和复杂度分析。

实验过程

1.算法设计

二路归并排序算法,分为两个阶段,首先对待排序列进行拆分,然后进行合并排序。

第一阶段:将待排序列分长度成大致相等的两个子序列,按照同样的拆分方法,对每个子序列进行拆分,直到子序列中只有一个元素。

第二阶段:对拆分的结果,自底向上将相邻的两个有序序列合并排序。

2.程序清单

#include<stdio.h>
#include<malloc.h>
void disp(int a[],int n)
{
	int i;
	for(i=0;i<n;i++)
		printf("%d ",a[i]);
	printf("\n");
}
//将两个相邻的有序子序列归并为一个有序子序列
void Merge(int a[],int low,int mid,int high)
{
	int *tmpa;//创建临时数组tmpa储存合并结果
	int i=low,j=mid+1,k=0;//k是tmpa的下标,i,j分别为两个子表的下标
	tmpa=(int *)malloc((high-low+1)*sizeof(int));
	while(i<=mid&&j<=high)
		if(a[i]<=a[j])//将第一个子表中的元素放入tmpa中
		{
			tmpa[k]=a[i];
			i++;
			k++;
		}
		else//将第二个子表中的元素放入tmpa中
		{
			tmpa[k]=a[j];
			j++;
			k++;
		}
	while(i<=mid)//将第一个子表余下的部分复制到tmpa中
	{
		tmpa[k]=a[i];
		i++;
		k++;
	}
	while(j<=high)//将第二个子表余下的部分复制到tmpa中国
	{
		tmpa[k]=a[j];
		j++;
		k++;
	}
	for(k=0,i=low;i<=high;k++,i++)//将tmpa复制到a中
		a[i]=tmpa[k];
	free(tmpa);
}

//二路归并算法
void MergeSort(int a[],int low,int high)
{
	int mid;
	if(low<high)
	{
		mid=(low+high)/2;
		MergeSort(a,low,mid);//对a[low,mid]子序列排序
		MergeSort(a,mid+1,high);//对a[mid+1,high]子序列排序
		Merge(a,low,mid,high);//将两个子序列合并
	}
}
void main()
{
	int n=10;
	int a[]={1,5,2,4,10,6,3,8,9,10};
	printf("排序前");
	disp(a,n);
	MergeSort(a,0,n-1);
	printf("排序后");
	disp(a,n);
}

3.运行结果

4.算法复杂度分析

设MergeSort(a,0,n-1)算法的执行时间为T(n),显然Merge(a,0,n/2,n-1)合并操作的执行时间为O(n),所有得到以下递推式:

当n=1时,T(n)=1

当n>1时,T(n)=2T(n/2)+O(n)

故二路归并排序的算法时间复杂度为O(nlogn)

在算法中需要一个一维数组辅存储排序结果,所以空间复杂度为O(n)

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

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

相关文章

Anaconda下的tensorflow安装

关于Anaconda的安装以及配置可以浏览我的上一篇博客Anaconda的安装与配置 下面是安装tensorflow的命令&#xff0c;使用下列指令安装前需要配置好CUDA&#xff0c;关于CUDA的配置在上一篇博客中有详细的步骤描述。 关于官方环境配置的要求可以浏览官网&#xff1a;https://t…

每帧纵享丝滑——ToDesk云电脑、网易云游戏、无影云评测分析及ComfyUI部署

目录 一、前言二、云电脑性能测评分析2.1、基本配置分析2.1.1、处理器方面2.1.2、显卡方面2.1.3、内存与存储方面2.1.4、软件功能方面 2.2、综合跑分评测 三、软件应用实测分析3.1、云电竞测评3.2、AIGC科研测评——ComfyUI部署3.2.1、下载与激活工作台3.2.2、加载模型与体验3.…

yolov8目标检测 部署瑞芯微rk3588记录

1. 前置条件 本地电脑系统&#xff0c;ubuntu20.04 训练代码&#xff1a; 训练代码下载的ultralytics官方代码 SHA&#xff1a;6a2fddfb46aea45dd26cb060157d22cf14cd8c64 训练代码仅做数据修改&#xff0c;类别修改&#xff0c;代码结构未做任何修改 需要准备的代码&#…

基于springboot+vue+Mysql的论坛管理系统

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

图深度学习(一):介绍与概念

目录 一、介绍 二、图的数据结构 三、图深度学习的基本模型 四、图深度学习的基本操作和概念 五、训练过程 六、主要应用场景 七、总结 一、介绍 图深度学习是将深度学习应用于图形数据结构的领域&#xff0c;它结合了图论的概念和深度学习的技术&#xff0c;用以处理和…

刷新认知,Python中循环结构可以这么简单?

应用场景 我们在写程序的时候&#xff0c;一定会遇到需要重复执行某条或某些指令的场景。例如用程序控制机器人踢足球&#xff0c;如果机器人持球而且还没有进入射门范围&#xff0c;那么我们就要一直发出让机器人向球门方向移动的指令。 在这个场景中&#xff0c;让机器人向…

大数据建模理论

文章目录 一、数仓概述1、数据仓库概念1.1 概述1.2 数据仓库与数据库的区别1.3 技术选型和架构 2、数仓常见名词2.1 实体2.2 维度2.3 度量2.4 粒度2.5 口径2.6 指标2.7 标签2.8 自然键/持久键/代理键2.9 退化维度2.10 下钻/上卷2.11 数据集市 3、数仓名词之间关系3.1 实体表&am…

这个项目我投了,给 OceanBase 数据库诊断提提速!

1. 前言 昨天晚上公司内部直播分享了一下OceanBase敏捷版诊断工具obdiag&#xff0c;主要的目的是拉齐一下前线和后端开发人员的诊断OceanBase问题的信息&#xff0c;众人拾柴火焰高&#xff0c;大家一起把obdiag做起来。晚上回去想了想&#xff0c;obdiag既然是开源项目&…

SiLM5350系列带米勒钳位的单通道隔离驱动器 助力汽车与工业应用实现稳定与高效的解决方案

带米勒钳位的隔离驱动SiLM5350系列 单通道 30V&#xff0c;10A 带米勒钳位的隔离驱动 具有驱动电流更大、传输延时更低、抗干扰能力更强、封装体积更小等优势, 为提高电源转换效率、安全性和可靠性提供理想之选。 SiLM5350系列产品描述&#xff1a; SiLM5350系列是单通道隔离驱…

[入门]测试原则-ApiHug准备-测试篇-002

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace 写在前面…

GT资源-CPLL QPLL

一、前言 QPLL与CPLL是两种为GT Channel提供时钟的锁相环&#xff0c;其中CPLL与GT Channel绑定&#xff0c;每一个通道都有一个CPLL&#xff0c;而QPLL是与Quad绑定&#xff0c;每一个Quad有一个QPLL&#xff0c;4个通道共享一个QPLL 二、CPLL 每个GTX/GTH收发器通道包含一…

luigi,一个超级厉害的 Python 库!

什么是 Python Luigi&#xff1f; Python Luigi 是一个用于构建复杂数据处理管道&#xff08;工作流&#xff09;的Python模块。Luigi由Spotify开发并维护&#xff0c;旨在简化和管理大规模数据处理任务的执行。 关键特点包括&#xff1a; 1.任务定义&#xff1a; Luigi允许…

TypeError: Cannot read properties of undefined (reading ‘tapAsync‘)

项目启动&#xff0c;一直报tabAsync未定义&#xff0c;整个项目中没有找到引用的地方&#xff1b; 最终重新安装webpack4版本 解决问题&#xff1b; npm install webpack4

【重回王座】ChatGPT发布最新模型gpt-4-turbo-2024-04-09

今天&#xff0c;新版GPT-4 Turbo再次在大型模型排行榜上荣登榜首&#xff0c;成功超越了此前领先的Claude 3 Opus。另外&#xff0c;新模型在处理长达64k的上下文时&#xff0c;性能竟能够与旧版在处理26k上下文时的表现相当。 目前GPT-4 Turbo仅限于ChatGPT Plus的用户&…

苍穹外卖项目总结1-12

苍穹外卖 文章标题地址苍穹外卖Day01——总结1https://lushimeng.blog.csdn.net/article/details/135466359苍穹外卖Day02——总结2https://lushimeng.blog.csdn.net/article/details/135484126苍穹外卖Day03——总结3https://lushimeng.blog.csdn.net/article/details/1363788…

PyTorch与深度学习:探索现代神经网络的魅力

在科技飞速发展的今天&#xff0c;深度学习作为人工智能领域的重要分支&#xff0c;已经在图像识别、自然语言处理、语音识别等多个领域取得了突破性的进展。而PyTorch&#xff0c;作为一款开源的深度学习框架&#xff0c;以其简洁易用、动态计算图等特性&#xff0c;赢得了广大…

修改百度百科的条件

百度百科&#xff0c;作为全球最大的中文百科全书&#xff0c;每天吸引着无数用户前来浏览和编辑。然而&#xff0c;要修改百度百科的内容&#xff0c;并非易事。本文将详细介绍修改百度百科的条件&#xff0c;帮助有志于参与编辑的用户更好地了解并做好准备。 1. 注册百度账号…

2024 计算机毕业设计之SpringBoot+Vue项目合集(源码+L文+PPT)

各位朋友大家好&#xff0c;有幸与屏幕前你们相识&#xff0c;博主现已经搬砖9年&#xff0c;趁着头发还充裕&#xff0c;希望给大家提供一些编程领域的帮助&#xff0c;深知计算机毕业生这个阶段的崩溃与闹心&#xff0c;让我们共同交流进步。 博主给大家列举了项目合集&#…

Springboot+Vue项目-基于Java+MySQL的房产销售系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

【从浅学到熟知Linux】进程控制上篇=>进程创建、进程终止与进程等待(含_exit与exit的区别、fork函数详解、wait与waitpid详解)

&#x1f3e0;关于专栏&#xff1a;Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程等内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 进程创建fork函数写时拷贝 进程退出进程退出操作系统做了什么&#xff1f;进程退出场景进程退出的常见方法…