当前位置: 首页 > news >正文

考研数据结构——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.lryc.cn/news/447264.html

相关文章:

  • LDO功率管选取NMOS和PMOS区别
  • 【Linux】进程的标识符、状态(超详解)
  • Elasticsearch 启动后在浏览器输入http://localhost:9200 访问失败
  • javascript中new操作符的工作原理
  • 基于springboot+vue 旅游网站的设计与实现
  • Ansible集群服务部署案例
  • 探索AI编程新境界:aider库揭秘
  • SQL Server 2012 ldf日志文接太大的截断和收缩日志处理
  • java日志门面之JCL和SLF4J
  • Oracle DB运维常用的视图及数据字典
  • vue.config.js devServer中changeOrigin的作用
  • 基于Ubuntu 20.04 LTS上部署MicroK8s(最小生产的 Kubernetes)
  • Spring:项目中的统一异常处理和自定义异常
  • 有点快要跟不上时代的感觉
  • 【pytorch】pytorch入门4:神经网络的卷积层
  • 【机器学习】探索LSTM:深度学习领域的强大时间序列处理能力
  • QT学习笔记之文件操作
  • Mybatis XML配置文件操作数据库
  • Ansible-template模块动态生成特定文件
  • 【Hadoop】【vim编辑器】【~/.bashrc 文件】如何编辑
  • vs code自动报错
  • 详细分析Nginx中的proxy_pass 末尾斜杠
  • 数据结构:双指针—移动0(OJ283)
  • LeetCode - 850 矩形面积 II
  • Jenkins Pipeline 中通过勾选参数来控制是否构建 Docker 镜像
  • C++入门基础知识86(实例)——实例11【计算自然数之和】
  • ChatGPT与R语言融合技术在生态环境数据统计分析、绘图、模型中的实践与进阶应用
  • OpenAi以及Dify结合生成Ai模型
  • 【漏洞复现】用友 UFIDA /portal/pt/file/upload 任意文件上传漏洞
  • C:内存函数