考研数据结构——C语言实现归并排序

  1. 包含头文件:程序首先包含了标准输入输出库stdio.h,以便使用printf等函数进行输入输出操作。

  2. 定义数组和数组大小:定义了一个宏N,其值为5,表示数组q的长度。数组q被初始化为{5, 3, 8, 4, 2},这是我们要排序的原始数组。同时定义了一个辅助数组w,用于在归并过程中临时存储数据。

  3. 归并排序函数merge_sort函数是一个递归函数,它接受两个参数lr,分别表示要排序的子数组的起始和结束索引。如果子数组的长度为1(即l >= r),则不需要排序,函数直接返回。函数递归地将数组分为两半,分别对左半部分lmid和右半部分mid + 1r进行排序。

    在归并过程中,使用三个指针ijk,分别指向左半部分的当前元素、右半部分的当前元素和辅助数组w的当前位置。第一个while循环比较左右两部分的当前元素,将较小的元素复制到辅助数组w中。接下来的两个while循环分别处理左右两部分的剩余元素。最后一个for循环将辅助数组w中的元素复制回原数组q,完成归并过程。

  4. 主函数main函数是程序的入口点。调用merge_sort函数,传入0和N - 1作为参数,表示对整个数组q进行排序。使用一个for循环和printf函数打印排序后的数组。

  5. 运行结果:程序将输出排序后的数组{2, 3, 4, 5, 8},这表示数组q已经被成功排序。

  6. 总结:这个程序展示了归并排序算法的实现,它通过递归地将数组分成更小的部分,然后合并这些部分来排序整个数组。归并排序的时间复杂度为O(n log n),是一种稳定的排序算法。

#include <stdio.h>#define N 5 // 定义数组q的长度int q[N] = { 5, 3, 8, 4, 2 }; // 待排序的数组
int w[N]; // 辅助数组void merge_sort(int l, int r) {if (l >= r)return;int mid = l + r >> 1; // 计算中间位置merge_sort(l, mid);merge_sort(mid + 1, r);int i = l, j = mid + 1, k = 0;while (i <= mid && j <= r) {if (q[i] <= q[j])w[k++] = q[i++];elsew[k++] = q[j++];}while (i <= mid)w[k++] = q[i++];while (j <= r)w[k++] = q[j++];for (i = l, j = 0; j < k; i++, j++)q[i] = w[j];
}int main() {merge_sort(0, N - 1);printf("Sorted array: ");for (int i = 0; i < N; i++) {printf("%d ", q[i]);}printf("\n");return 0;
}

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

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

相关文章

BFS 解决 FloodFill 算法

BFS 解决 FloodFill 算法 题目一&#xff1a; 图像渲染1. 题⽬链接&#xff1a;2. 题⽬描述&#xff1a;3. 算法思路&#xff1a;4.代码 题目二&#xff1a; 岛屿数量1. 题⽬链接&#xff1a;2. 题⽬描述&#xff1a;3. 算法思路&#xff1a;4.代码 题目三&#xff1a;被围绕的…

论文不会写怎么办?推荐这5款AI论文工具帮你一键搞定!

在当今的学术研究和写作领域&#xff0c;AI论文工具已经成为不可或缺的助手。这些工具不仅能够提高写作效率&#xff0c;还能帮助研究者生成高质量的论文。本文将推荐五款优秀的AI论文工具&#xff0c;并特别推荐千笔-AIPassPaper&#xff0c;以帮助读者更好地完成学术写作任务…

OJ在线评测系统 后端 判题机模块预开发 架构分析 使用工厂模式搭建

判题机模块预开发(架构师)(工厂模式) 判题机模块 是为了把代码交个代码沙箱去处理 得到结果返回 代码沙箱 梳理判题模块和代码沙箱的关系 判题模块&#xff1a;调用代码沙箱 把代码和输入交给代码沙箱去执行 代码沙箱&#xff1a;只负责接受代码和输入 返回编译的结果 不负…

初始化的代码块和@PostConstruct有什么区别

背景 在实际开发中&#xff0c;我们经常会需要进行一些初始化操作&#xff0c;比如进行一些预加载和赋值之类的。在代码中&#xff0c;常见的有通过静态代码块、非静态代码块&#xff0c;PostConstruct来实现初始化。那么既然他们都可以实现初始化操作&#xff0c;那么他们有什…

Ubuntu 开机自启动 .py / .sh 脚本,可通过脚本启动 roslaunch/roscore等

前言 项目中要求上电自启动定位程序&#xff0c;所以摸索了一种 Ubuntu 系统下开机自启动的方法&#xff0c;开机自启动 .sh 脚本&#xff0c;加载 ROS 环境的同时启动 .py 脚本。在 . py 脚本中启动一系列 ROS 节点。 一、 .sh 脚本的编写 #!/bin/bash # gnome-terminal -- …

JetPack03-ViewModel 保证界面数据稳定性

前提 Activity横竖屏切换后&#xff0c;Activity中的数据会丢失。 因为横竖屏切换后&#xff0c;Activity会销毁重建&#xff0c;生命周期会执行onPause->onStop->onDestroy->onCreate->onStart->onReusme。 简介 ViewModel能保证Activity中数据的稳定性&…

【C++】map和set的介绍和使用

1.序列式容器与关联式容器 序列式容器&#xff1a; 底层为线性序列的数据结构&#xff0c; 里面存储的是元素本身 。如vector/list/string/deque/forward_list。 关联式容器&#xff1a; 也是用来存储数据的&#xff0c;于序列式容器不同的是&#xff0c; 里面存储的是<key&…

Python酷库之旅-第三方库Pandas(127)

目录 一、用法精讲 566、pandas.DataFrame.swapaxes方法 566-1、语法 566-2、参数 566-3、功能 566-4、返回值 566-5、说明 566-6、用法 566-6-1、数据准备 566-6-2、代码示例 566-6-3、结果输出 567、pandas.DataFrame.melt方法 567-1、语法 567-2、参数 567-3…

第三十篇——总结:成功的捷径是没有捷径

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 最终的总结&#xff0c;釜底抽薪&#xff0c;又一次如雷贯耳&#xff0c;…

9月26日

1.虚函数与纯虚函数&#xff1a; 在类中定义函数时&#xff0c;在函数前加关键字 virtual &#xff0c;允许在派生类中重写的方法。那么该函数就是虚函数。 纯虚函数&#xff1a;没有实现的方法&#xff0c;用于定义接口。 2.基类为什么需要虚析构函数&#xff1a; 确保删除派生…

找不到MSVCR100.dll怎么办,解决MSVCR100.dll丢失的六种方法

在计算机的日常使用中&#xff0c;我们可能会遇到各种各样的问题&#xff0c;其中之一就是MSVCR100.dll文件丢失。这个文件是Microsoft Visual C 2010的一个组件&#xff0c;如果丢失&#xff0c;可能会导致某些程序无法正常运行。那么&#xff0c;如何解决这个问题呢&#xff…

记一次Windows状态栏不显示问题

文章目录 &#x1fa9f;解决方案☁️单次处理☁️有效处理 &#x1fa9f;现象&#x1fa9f;尝试的操作⭐END&#x1f31f;跋&#x1f31f;交流方式 &#x1fa9f;解决方案 ☁️单次处理 重启explorer.exe 命令行操作 注意&#xff0c;使用命令行操作的时候&#xff0c;出现…

[嵌入式] 3588测试镜头推流拉流步骤

1. RK驱动下载 识别不出来设备&#xff0c;成砖了之后&#xff0c;在插上电源之前&#xff0c;按住boot键&#xff0c;再上电。 2. 在嵌入式设备中&#xff0c;执行命令&#xff0c;rtsp_server rtsp_server -I 1 -d /dev/video22 -w 640 -h 480 推流&#xff0c;用vlc拉流…

linux信号 | 学习信号三步走 | 全解析信号的产生方式

前言&#xff1a;本节内容是信号&#xff0c; 主要讲解的是信号的产生。信号的产生是我们学习信号的第二个阶段。 我们已经学习过第一个阶段——信号的概念与预备知识&#xff08;没有学过的友友可以查看我的前一篇文章&#xff09;。 以及我们还没有学习信号的第三个阶段——信…

【理解 Java 中的 for 循环】

理解 Java 中的 for 循环 for 循环是 Java 中用于迭代的常用控制结构&#xff0c;它可以帮助我们重复执行某段代码&#xff0c;直到满足特定条件。本文将介绍 for 循环的基本语法、执行流程、注意事项及一些练习。 基本语法 for 循环的基本语法如下&#xff1a; for (循环变…

你知道吗?制造手机芯片的关键竟然是一台“打印机”?

在我们每天离不开的智能手机里&#xff0c;藏着一颗小小的“心脏”——芯片。它虽小&#xff0c;却拥有着强大的计算能力&#xff0c;能够让我们随时随地与世界保持连接。你可能想象不到&#xff0c;制造这些精密芯片的关键设备&#xff0c;竟然与我们日常使用的打印机有着惊人…

PD快充是如何诱骗取电的

PD诱骗取电原理&#xff0c;主要指的是在使用USB Power Delivery(USB PD)协议的场景中&#xff0c;通过一种特殊设计的芯片来模拟受电设备&#xff08;如移动设备、充电宝等&#xff09;支持特定功率等级的过程。通常情况下&#xff0c;当一个支持PD协议的充电器连接到设备时…

2024年研究生数学建模“华为杯”E题——肘部法则、k-means聚类、目标检测(python)、ARIMA、逻辑回归、混淆矩阵(附:目标检测代码)

文章目录 一、情况介绍二、思路情况二、代码展示三、感受 一、情况介绍 前几天也是参加了研究生数学建模竞赛&#xff08;也就是华为杯&#xff09;&#xff0c;也是和本校的两个数学学院的朋友在网上组的队伍。昨天&#xff08;9.25&#xff09;通宵干完论文&#xff08;一条…

C语言编译和链接详解(通俗易懂,深入本质)

我们平时所说的程序,是指双击后就可以直接运行的程序,这样的程序被称为可执行程序(Executable Program)。在 Windows 下,可执行程序的后缀有.exe和.com(其中.exe比较常见);在类 UNIX 系统(Linux、Mac OS 等)下,可执行程序没有特定的后缀,系统根据文件的头部信息来判…

MyBatis<foreach>标签的用法与实践

foreach标签简介 实践 demo1 简单的一个批量更新&#xff0c;这里传入了一个List类型的集合作为参数&#xff0c;拼接到 in 的后面 &#xff0c;来实现一个简单的批量更新 <update id"updateVislxble" parameterType"java.util.List">update model…