归并两个子数组

【问题描述】

  有一个长度为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;
}
复制代码

 

posted @   Hi,小董先生  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示