归并排序 merge_sort

简介: 归并排序 merge_sort

题目描述

把一个长度为N的数值数组按从小到大的顺序排序并输出

输入描述:

输入为两行 第一行为一个整型数字N 第二行输入N个整型数字num 代表数组里面的元素(每个元素之间用空格隔开)

输出描述:

输出为一行 即为数组从小到大排序后的结果 每个数字之间用空格隔开(行末没有空格)

自测输入

10

1 8 7 6 4 4 4 789 4 1

实际输出

1 1 4 4 4 4 6 7 8 789

归并排序

归是递归,并是合并

先递归,再排序

如何递归,将数组均分成两半(可能有一边多一个{奇数没法均分成两半})

然后将两块再分成四块 (循环了哈)

merge_sort(l,mid);
merge_sort(mid+1,r);

直到分无可分,即长度为一

if(l >= r) return ;

再合并,我们是先递归,再合并

因从我们一定是从小区间先排序,小区间有序了,再去排序大区间

每一次排序区间长度分别为 [1,mid] [mid+1,r]

两个片段采用双指针法,令 i,j 分别为两个区间的头,k为临时数组的头(我们需要一个临时数组来存一下当前排序后的有序数据的结果)

int i=l,j=mid+1,k=1;

然后判断两个指针指向的数据谁小,小的放到临时数组中

while(i<=mid&&j<=r) {
  if(a[i]<=a[j]) b[k++]=a[i++];
  else b[k++]=a[j++];
}

能比较的都比较完了,有剩余数据的那些,说明他们比另一个数组中的所有数据都大,丢在临时数组末尾就好

while(i<=mid) b[k++]=a[i++];
while(j<=r) b[k++]=a[j++];

该区间排序完毕,但是我们是用临时数组来存储排序后的有序数据,所有我们需要把临时数组的数据,迁移到原数组的[l,r]区间内

for(int i=l,j=1;i<=r;i++,j++) a[i]=b[j];
 


给个板子

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5+10;
int a[N];
int b[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);
  
  //再合并 
  //将已经排好序的左右两边进行合并 
  //两边从前往后双指针进行判断,小的放到 b数组中  
  int i=l,j=mid+1,k=1;
  while(i<=mid&&j<=r) {
    if(a[i]<=a[j]) b[k++]=a[i++];
    else b[k++]=a[j++];
  }
  while(i<=mid) b[k++]=a[i++];
  while(j<=r) b[k++]=a[j++];
  
  //最后再把 b数组替换到 a数组对应位置  
  for(int i=l,j=1;i<=r;i++,j++) a[i]=b[j];
}
int main() {
  //IOS 关闭流,可写可不写,你写个快读效果差不多(一般不会出现什么问题)
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  
  int n;
  while(cin>>n) {
    for(int i=1;i<=n;i++) cin>>a[i];
    merge_sort(1,n);
    for(int i=1;i<=n;i++) cout<<a[i]<<" ";
    cout<<endl;   
  }
  
  return 0;
} 

目录
相关文章
|
索引 Python BI
pandas入门①
本指南直接来自pandas官方网站上的10分钟pandas指南。 我将它改写以使代码更易于访问。 本指南适用于之前未使用pandas的初学者。 使用如下缩写: df:任意的Pandas DataFrame对象 s:任意的Pandas Series对象...
1199 0
|
8天前
|
人工智能 安全 API
CoPaw:5分钟部署你的 AI助理
源自阿里巴巴开源生态的个人 AI 助理——CoPaw。作为阿里倾力打造的开源力作,CoPaw 完美打通钉钉、飞书、Discord 等多平台对话通道,支持定时任务自动化。内置 PDF/Office 深度处理、新闻摘要等强大技能,更开放自定义扩展接口。坚持数据全程私有化部署,绝不上传云端,让每一位用户都能在大厂技术加持下,拥有安全、专属的智能助手。
|
11天前
|
人工智能 自然语言处理 JavaScript
2026年Windows+Ollama本地部署OpenClaw保姆级教程:本地AI Agent+阿里云上快速搭建
2026年OpenClaw凭借本地部署、私有化运行的特性,成为打造个人智能体的核心工具,而Ollama作为轻量级本地大模型管理工具,能让OpenClaw摆脱对云端大模型的依赖,实现**本地推理、数据不泄露、全流程私有化**的智能体验。本文基于Windows 11系统,从硬件环境准备、Ollama安装与模型定制、OpenClaw部署配置、技能扩展到常见问题排查,打造保姆级本地部署教程,同时补充阿里云OpenClaw(Clawdbot)快速部署步骤,兼顾本地私有化需求与云端7×24小时运行需求,文中所有代码命令均可直接复制执行,确保零基础用户也能快速搭建属于自己的本地智能体。
11779 97
|
8天前
|
人工智能 安全 JavaScript
阿里云上+本地部署OpenClaw(小龙虾)新手攻略:解锁10大必备Skills,零基础也能玩转AI助手
2026年,开源AI代理工具OpenClaw(昵称“小龙虾”)凭借“能实际做事”的核心优势,在GitHub斩获25万+星标,成为现象级AI工具。它最强大的魅力在于可扩展的Skills(技能包)系统——通过ClawHub插件市场的数百个技能,能让AI助手从简单聊天升级为处理办公、学习、日常事务的全能帮手。
7784 28
|
6天前
|
人工智能 JavaScript Ubuntu
5分钟上手龙虾AI!OpenClaw部署(阿里云+本地)+ 免费多模型配置保姆级教程(MiniMax、Claude、阿里云百炼)
OpenClaw(昵称“龙虾AI”)作为2026年热门的开源个人AI助手,由PSPDFKit创始人Peter Steinberger开发,核心优势在于“真正执行任务”——不仅能聊天互动,还能自动处理邮件、管理日程、订机票、写代码等,且所有数据本地处理,隐私完全可控。它支持接入MiniMax、Claude、GPT等多类大模型,兼容微信、Telegram、飞书等主流聊天工具,搭配100+可扩展技能,成为兼顾实用性与隐私性的AI工具首选。
6008 12
|
10天前
|
人工智能 自然语言处理 机器人
保姆级教程:Mac本地搭建OpenClaw及阿里云上1分钟部署OpenClaw+飞书集成实战指南
OpenClaw(曾用名Clawdbot、Moltbot)作为2026年最热门的开源个人AI助手平台,以“自然语言驱动自动化”为核心,支持对接飞书、Telegram等主流通讯工具,可替代人工完成文件操作、日历管理、邮件处理等重复性工作。其模块化架构适配多系统环境,既可以在Mac上本地化部署打造私人助手,也能通过阿里云实现7×24小时稳定运行,完美兼顾隐私性与便捷性。
7145 17
|
3天前
|
人工智能 安全 前端开发
Team 版 OpenClaw:HiClaw 开源,5 分钟完成本地安装
HiClaw 基于 OpenClaw、Higress AI Gateway、Element IM 客户端+Tuwunel IM 服务器(均基于 Matrix 实时通信协议)、MinIO 共享文件系统打造。
3063 7
|
4天前
|
人工智能 JavaScript 测试技术
保姆级教程:OpenClaw阿里云及本地部署+Claude Code集成,打造全能 AI 编程助手
在AI编程工具百花齐放的2026年,Anthropic推出的Claude Code凭借72.5%的SWE-bench测试高分、25倍于GitHub Copilot的上下文窗口,成为开发者追捧的智能编程助手。但单一工具仍有局限——Claude Code擅长代码生成与审查,却缺乏灵活的部署与自动化执行能力;而OpenClaw(前身为Clawdbot)作为开源AI代理框架,能完美弥补这一短板,通过云端与本地双部署,实现“代码开发-测试-部署”全流程自动化。
2189 13
|
11天前
|
人工智能 JSON JavaScript
手把手教你用 OpenClaw + 飞书,打造专属 AI 机器人
手把手教你用 OpenClaw(v2026.2.22-2)+ 飞书,10分钟零代码搭建专属AI机器人!内置飞书插件,无需额外安装;支持Claude等主流模型,命令行一键配置。告别复杂开发,像聊同事一样自然对话。
6875 17
手把手教你用 OpenClaw + 飞书,打造专属 AI 机器人

热门文章

最新文章