当前位置: 首页 > news >正文

7-1 递归二路归并排序

7-1 递归二路归并排序

本题目要求读入N个整数,采用递归的二路归并排序法进行排序,输出前3轮排序后的结果。

输入格式:

输入不超过100的正整数N和N个整数(空格分隔)。

输出格式:

输出三行,第一行为第一轮排序结果,第二行为第二轮排序结果,第三行为第三轮排序结果。数据间用一个空格分隔。

为简便起见,最后一个元素后也有一个空格。

输入样例:

5
5 4 3 2 1

输出样例:

4 5 3 2 1 
3 4 5 2 1 
3 4 5 1 2 

简化版代码:

#include <iostream>
#include <algorithm>
using namespace std;const int N = 110;
int a[N], n, cnt;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);sort(a + l, a + r + 1);if (++cnt > 3) return ;for (int i = 0; i < n; ++i) {printf("%d ", a[i]);}printf("\n");
}int main()
{scanf("%d", &n);for (int i = 0; i < n; ++i) {scanf("%d", &a[i]);}merge_sort(0, n);return 0;
}

注意:代码sort(a + l, a + r + 1);​为了方便起见写成这样,但实际上思路和时间复杂度差不多,如果是正常学习,还请按经典写法写。

中文注释版代码

#include <iostream>
#include <algorithm>
using namespace std;const int N = 110;
int a[N], n, cnt;// 归并排序
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);// 对[l, r]范围内的数组进行排序sort(a + l, a + r + 1);// 输出排序后的数组,最多输出三次if (++cnt > 3) return ;for (int i = 0; i < n; ++i) {printf("%d ", a[i]);}printf("\n");
}int main()
{scanf("%d", &n);// 输入数组元素for (int i = 0; i < n; ++i) {scanf("%d", &a[i]);}// 调用归并排序函数merge_sort(0, n);return 0;
}

java版代码

import java.util.Arrays;
import java.util.Scanner;public class Main {static final int N = 110;static int[] a = new int[N];static int n, cnt;// 归并排序static void mergeSort(int l, int r) {if (l >= r) return;int mid = (l + r) >> 1;mergeSort(l, mid);mergeSort(mid + 1, r);// 对[l, r]范围内的数组进行排序Arrays.sort(a, l, r + 1);// 输出排序后的数组,最多输出三次if (++cnt > 3) return;for (int i = 0; i < n; ++i) {System.out.print(a[i] + " ");}System.out.println();}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 输入数组长度n = scanner.nextInt();// 输入数组元素for (int i = 0; i < n; ++i) {a[i] = scanner.nextInt();}// 调用归并排序函数mergeSort(0, n - 1);}
}

相关文章:

  • 运筹视角下,体系化学习机器学习算法原理的实践和总结
  • ubuntu 18/20/22 安装 mysql 数据库
  • HUAWEI华为笔记本电脑MateBook D 14 2022款 i5 集显 非触屏(NbDE-WFH9)原装出厂Windows11系统21H2
  • Postman接口测试(超详细整理)
  • 在Jetpack Compose中使用ExoPlayer实现直播流和音频均衡器
  • Leetcod面试经典150题刷题记录 —— 矩阵篇
  • hash长度扩展攻击
  • 新零售模式:重新定义商业未来
  • udp异步方式接收消息
  • 【AI】人工智能复兴的推进器之自然语言处理
  • 卸载了Visual Studio后,在vscode中执行npm i或npm i --force时报错,该怎么解决?
  • 179.【2023年华为OD机试真题(C卷)】最大坐标值(模拟实现JavaPythonC++JS)
  • 黑豹程序员-读properties属性文件本地正常,打包jar后运行出错
  • pandas离线安装
  • node-red:使用node-red-contrib-amqp节点,实现与RabbitMQ服务器(AMQP)的消息传递
  • 网络传输文件的问题
  • [PHP内核探索]PHP中的哈希表
  • 【RocksDB】TransactionDB源码分析
  • Akka系列(七):Actor持久化之Akka persistence
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Netty源码解析1-Buffer
  • nodejs实现webservice问题总结
  • SpiderData 2019年2月16日 DApp数据排行榜
  • 闭包--闭包作用之保存(一)
  • 二维平面内的碰撞检测【一】
  • 浮现式设计
  • 工作手记之html2canvas使用概述
  • 记一次删除Git记录中的大文件的过程
  • 树莓派 - 使用须知
  • 写代码的正确姿势
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 智能合约Solidity教程-事件和日志(一)
  • ​ArcGIS Pro 如何批量删除字段
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • # 透过事物看本质的能力怎么培养?
  • #git 撤消对文件的更改
  • (¥1011)-(一千零一拾一元整)输出
  • (1)bark-ml
  • (bean配置类的注解开发)学习Spring的第十三天
  • (WSI分类)WSI分类文献小综述 2024
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • **python多态
  • .NET 8.0 中有哪些新的变化?
  • .Net Redis的秒杀Dome和异步执行
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .NET中 MVC 工厂模式浅析
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • /run/containerd/containerd.sock connect: connection refused
  • [20180129]bash显示path环境变量.txt
  • [④ADRV902x]: Digital Filter Configuration(发射端)
  • [ArcPy百科]第三节: Geometry信息中的空间参考解析
  • [C++]C++入门--引用
  • [Go WebSocket] 多房间的聊天室(五)用多个小锁代替大锁,提高效率