归并两个子数组
【问题描述】
有一个长度为N的数组,其中,[1,mid]区间已经有序,[mid+ 1,N]区间也已经有序,请把整个数组排成有序序列。
【输入】
第一行有两个数字,分别是数组长度N以及分界点mid, 1<=mid<N<=106。第二行有N个数字,用空格隔开
【输出】
排序之后的数组,数字之间用空格隔开,单独占一行。
【样例输入】
8 3
2 4 6 1 2 5 7 8
【样例输出】
1 2 2 4 5 6 7 8
#include<iostream> using namespace std; int a[1000001]={}; void gb(int a[], int n, int mid){ int temp[n+1]; int i=1; // 原数组的首元素的位置。 int j=mid+1; // 元素组下标为mid+1的元素位置。 int k=1; // 临时数组的下标。 while(i<=mid&&j<=n){ if(a[i]<=a[j]) temp[k++]=a[i++]; else temp[k++]=a[j++]; } // 如果左侧有数据,右侧无数据。 while(i<=mid) temp[k++]=a[i++]; // 如果右侧有数据,左侧无数据。 while(j<=n) temp[k++]=a[j++]; copy(temp+1, temp+n+1, a+1); } int main(){ int n, mid; cin>>n>>mid; for(int i=1; i<=mid; i++){ cin>>a[i]; } for(int i=mid+1; i<=n; i++){ cin>>a[i]; } gb(a, n, mid); for(int i=1; i<=n; i++){ cout<<a[i]<<" "; } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现