787. 归并排序

文章目录

Question

给定你一个长度为 n

的整数数列。

请你使用归并排序对这个数列按照从小到大进行排序。

并将排好序的数列按顺序输出。

输入格式

输入共两行,第一行包含整数 n

第二行包含 n

个整数(所有整数均在 1∼109

范围内),表示整个数列。

输出格式

输出共一行,包含 n

个整数,表示排好序的数列。

数据范围

1≤n≤100000

输入样例:

5

3 1 2 4 5

输出样例:

1 2 3 4 5

Ideas

Code

cpp 复制代码
// 归并排序步骤
// 1. 选取中间点
// 2. 递归左右区间
// 3. 合并两个区间
#include <iostream>

using namespace std;
const int N = 1e5 + 10;
int a[N], tem[N];

void merge_sort(int *a, int l, int r)
{
    if (l >= r) return;
    
    int mid = l + r >> 1;
    
    merge_sort(a, l, mid), merge_sort(a, mid + 1, r);
    
    int i = l, j = mid + 1, k = 0;
    while(i <= mid && j <= r)
    {
        if (a[i] <= a[j]) // 稳定
            tem[k ++] = a[i ++];
        else
            tem[k ++] = a[j ++];
    }
    while(i <= mid)
    {
        tem[k ++] = a[i ++];
    }
    while(j <= r)
    {
        tem[k ++] = a[j ++];
    }
    for (int i = l, j = 0; i <= r; i ++)
    {
        a[i] = tem[j ++ ];
    }
}
int main()
{
    int n;
    scanf("%d", &n);
    
    for (int i = 0; i < n; i ++) scanf("%d", &a[i]);
    
    merge_sort(a, 0, n - 1);
    
    for (int i = 0; i < n; i ++) printf("%d ", a[i]);
    
    return 0;
}
相关推荐
乐迪信息1 小时前
乐迪信息:基于AI算法的煤矿作业人员安全规范智能监测与预警系统
大数据·人工智能·算法·安全·视觉检测·推荐算法
hsjkdhs2 小时前
C++之多层继承、多源继承、菱形继承
开发语言·c++·算法
立志成为大牛的小牛2 小时前
数据结构——十七、线索二叉树找前驱与后继(王道408)
数据结构·笔记·学习·程序人生·考研·算法
星空下的曙光2 小时前
Node.js crypto模块所有 API 详解 + 常用 API + 使用场景
算法·node.js·哈希算法
Algo-hx2 小时前
数据结构入门 (七):从“链接”到“分支” —— 初探树与二叉树
数据结构
小贾要学习3 小时前
【数据结构】C++实现红黑树
数据结构·c++
StarPrayers.4 小时前
旅行商问题(TSP)(2)(heuristics.py)(TSP 的两种贪心启发式算法实现)
前端·人工智能·python·算法·pycharm·启发式算法
爱吃橘的橘猫4 小时前
嵌入式系统与嵌入式 C 语言(2)
c语言·算法·嵌入式
235164 小时前
【LeetCode】146. LRU 缓存
java·后端·算法·leetcode·链表·缓存·职场和发展
weixin_307779135 小时前
使用Python高效读取ZIP压缩文件中的UTF-8 JSON数据到Pandas和PySpark DataFrame
开发语言·python·算法·自动化·json