news 2026/6/23 22:54:58

C语言学习笔记20260615-有序升序序列合并

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言学习笔记20260615-有序升序序列合并

C语言学习笔记20260615-有序升序序列合并

要求

输入两个升序排列的整数序列,元素个数分别为mn;将两个序列合并为一个新的升序序列,并完整输出。


方法一:双指针合并法(推荐,高效)

算法思路

两个原始数组本身已经升序,使用双指针同时遍历两个数组:

  1. 分别用指针指向两个数组起始位置;
  2. 依次对比两个指针指向的元素,将较小值存入结果数组,并移动对应指针;
  3. 其中一个数组遍历完成后,直接把另一个数组剩余元素全部追加到结果末尾;
  4. 优势:利用原有有序特性,无需二次排序,执行效率最高。

完整代码

#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#defineMAX_LEN100// 定义数组最大容量intmain(){intarr1[MAX_LEN],arr2[MAX_LEN];intres[MAX_LEN*2];// 存储合并后的结果数组intm,n;// m、n 分别为两个序列的元素个数inti=0,j=0,k=0;// i遍历arr1,j遍历arr2,k遍历结果数组// 输入第一个升序序列printf("请输入第一个序列元素个数 m:");scanf("%d",&m);printf("请输入 %d 个升序整数:",m);for(i=0;i<m;i++){scanf("%d",&arr1[i]);}// 输入第二个升序序列printf("请输入第二个序列元素个数 n:");scanf("%d",&n);printf("请输入 %d 个升序整数:",n);for(j=0;j<n;j++){scanf("%d",&arr2[j]);}// 重置指针,开始合并i=0;j=0;// 同时遍历两个数组,取较小元素放入结果数组while(i<m&&j<n){if(arr1[i]<arr2[j]){res[k++]=arr1[i++];}else{res[k++]=arr2[j++];}}// 处理arr1中剩余元素while(i<m){res[k++]=arr1[i++];}// 处理arr2中剩余元素while(j<n){res[k++]=arr2[j++];}// 输出合并后的升序序列printf("合并后的升序序列:");for(intt=0;t<m+n;t++){printf("%d ",res[t]);}printf("\n");return0;}

方法二:数组拼接 + 冒泡排序法(入门易懂)

算法思路

1.先将两个数组完整拼接到同一个新数组中;

2.对拼接完成的整体数组执行冒泡排序,得到升序结果;

3.无需理解双指针逻辑,纯基础循环实现,适合新手学习。

完整代码

#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#defineMAX_LEN100intmain(){intarr1[MAX_LEN],arr2[MAX_LEN],res[MAX_LEN*2];intm,n;inti,j;// 输入第一个序列并存入结果数组前半段printf("请输入第一个序列元素个数 m:");scanf("%d",&m);printf("请输入 %d 个升序整数:",m);for(i=0;i<m;i++){scanf("%d",&arr1[i]);res[i]=arr1[i];}// 输入第二个序列,拼接到结果数组后半段printf("请输入第二个序列元素个数 n:");scanf("%d",&n);printf("请输入 %d 个升序整数:",n);for(i=0;i<n;i++){scanf("%d",&arr2[i]);res[m+i]=arr2[i];}inttotal=m+n;// 合并后总元素数量// 冒泡排序:对整体数组升序排序for(i=0;i<total-1;i++){for(j=0;j<total-1-i;j++){// 前大于后则交换位置if(res[j]>res[j+1]){inttemp=res[j];res[j]=res[j+1];res[j+1]=temp;}}}// 输出结果printf("合并后的升序序列:");for(i=0;i<total;i++){printf("%d ",res[i]);}printf("\n");return0;}

方法三:原地拼接排序(节省额外数组空间)

算法思路

1.假设第一个数组空间充足,可容纳两组所有数据;

2.将第二个数组直接拼接到第一个数组尾部;

3.对拼接完成的原数组做冒泡排序,实现升序;

4.不新建独立结果数组,最大化节省内存空间。

完整代码

#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#defineMAX_LEN200// 数组长度预留足够空间,存放两组数据intmain(){intarr1[MAX_LEN],arr2[MAX_LEN];intm,n;inti,j;// 输入第一个升序序列printf("请输入第一个序列元素个数 m:");scanf("%d",&m);printf("请输入 %d 个升序整数:",m);for(i=0;i<m;i++){scanf("%d",&arr1[i]);}// 输入第二个序列,并拼接到 arr1 尾部printf("请输入第二个序列元素个数 n:");scanf("%d",&n);printf("请输入 %d 个升序整数:",n);for(i=0;i<n;i++){scanf("%d",&arr2[i]);arr1[m+i]=arr2[i];}inttotal=m+n;// 冒泡排序整体数组for(i=0;i<total-1;i++){for(j=0;j<total-1-i;j++){if(arr1[j]>arr1[j+1]){inttemp=arr1[j];arr1[j]=arr1[j+1];arr1[j+1]=temp;}}}// 输出最终合并结果printf("合并后的升序序列:");for(i=0;i<total;i++){printf("%d ",arr1[i]);}printf("\n");return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 22:40:36

Spring AI 接入 MCP:DeepSeek 连接 Filesystem Server 读取本地文件

Spring AI 接入 MCP&#xff1a;DeepSeek 连接 Filesystem Server 读取本地文件 做 Tool Calling Demo 时&#xff0c;我们通常会把工具直接写在 Java 应用里&#xff1a; Tool(description "查询订单") public String queryOrder(String orderId) {return orderSer…

作者头像 李华
网站建设 2026/6/23 22:34:53

《个人头像上传》一、photoAccessHelper_Functions使用指南

HarmonyOS photoAccessHelper Functions 完全指南&#xff1a;从相册选取图片的实战教程适用版本&#xff1a;HarmonyOS &#xff08;API 23&#xff09;| DevEco Studio 6.1 关键词&#xff1a;photoAccessHelper、PhotoViewPicker、图片选择器、相册管理、MimeTypeFilter效果…

作者头像 李华
网站建设 2026/6/23 22:33:53

金融事件序列建模:PRAGMA Transformer模型解析与应用

1. PRAGMA&#xff1a;金融事件序列建模的Transformer基础模型 在金融科技领域&#xff0c;银行和支付平台每天产生海量的交易事件和用户行为数据。这些数据天然具有序列特性&#xff0c;包含丰富的经济信号&#xff0c;但传统方法需要针对每个任务单独构建特征工程管道。PRAGM…

作者头像 李华
网站建设 2026/6/23 22:22:57

基于CGAN与LSTM的加密市场异常检测:合成数据生成实战

1. 项目概述&#xff1a;当合成数据遇上加密市场波动 最近几年&#xff0c;无论是做量化策略的朋友&#xff0c;还是搞风控的同行&#xff0c;估计都为一个事儿头疼过&#xff1a;加密货币的历史数据&#xff0c;尤其是那些能反映极端市场行情的“黑天鹅”事件数据&#xff0c;…

作者头像 李华
网站建设 2026/6/23 22:20:36

Ubuntu 16.04 安装 devtools:旧系统对接 R 最新生态的实战指南

1. 项目概述&#xff1a;为什么在 Ubuntu 16.04 上用 devtools 装 R 包不是“多此一举”&#xff0c;而是刚需 R 语言用户常遇到一个典型困境&#xff1a;想用某个最新版的统计模型包&#xff0c;比如 lme4 的开发版修复了混合效应模型收敛问题&#xff1b;或者想直接从 GitH…

作者头像 李华
网站建设 2026/6/23 22:16:54

JavaScript事件循环详解:从宏任务微任务到async/await执行机制

1. 这不是“概念背诵题”&#xff0c;而是 JavaScript 执行引擎的底层操作系统图谱你有没有遇到过这样的场景&#xff1a;在控制台里敲下setTimeout(() > console.log(A), 0); console.log(B);&#xff0c;结果却先打印出 B&#xff0c;再打印 A&#xff1f;或者写了个fetch…

作者头像 李华