归并排序

【问题描述】

  给定长度为N的乱序数组,请结合刚刚的程序,实现归并排序,使得数组升序排列。1<=N<=103

【输入】

  第一行为一个数字N,表示数组的长度,第二行为N个数字,用空格隔开

【输出】

  排序后的数组,数字之间用空格隔开

【样例输入】

  8

  60 71 49 11 82 49 3 66

【样例输出】

  3 11 49 49 60 66 71 82

复制代码
#include<iostream>
using namespace std;
int a[101], b[101];

void guibing(int left, int right){
    // 先分解。 
    if(left==right) return;
    int mid=(left+right)/2;
    guibing(left, mid);
    guibing(mid+1, right);
    // 后合并。
    int i=left;
    int j=mid+1;
    int k=left; // 临时数组下标。
    while(i<=mid&&j<=right) {
        if(a[i]<=a[j]) b[k++]=a[i++];
        else b[k++]=a[j++];
    }
    while(i<=mid) b[k++]=a[i++];
    while(j<=right) b[k++]=a[j++];
    for(int i=1; i<=right; i++) a[i]=b[i];
    return;
}

int main(){
    int n;
    cin>>n;
    for(int i=1; i<=n; i++){
        cin>>a[i];
    }
    guibing(1, n);
    for(int i=1; i<=n; i++){
        cout<<a[i]<<" ";
    }
    return 0;
} 
复制代码

 

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