常见排序算法--合并排序

2023-11-10

思路:将一个无序的序列分组,直至分为每两个元素一组(如果有单个元素剩余,则可以剩余的单个元素自己一组),小组内排序,然后合并成一个有序的序列。

例子: 排序过程如图所示:图片摘选自:https://blog.csdn.net/ZY_cat/article/details/78404257

程序实现:

#include <iostream>  
using namespace std;
void merge(int *data, int p, int q, int r)
{
	int n1, n2, i, j, k;
	n1 = q - p + 1;
	n2 = r - q;
	int *left = new int[n1];
	int *right = new int[n2];
	for (i = 0; i<n1; i++)  //对左数组赋值  
		left[i] = data[p + i];
	for (j = 0; j<n2; j++)  //对右数组赋值  
		right[j] = data[q + 1 + j];
	i = j = 0;
	k = p;
	while (i<n1 && j<n2) //将数组元素值两两比较,并合并到data数组  
	{
		if (left[i] <= right[j])
			data[k++] = left[i++];
		else
			data[k++] = right[j++];
	}
	for (i; i<n1; i++) //如果左数组有元素剩余,则将剩余元素合并到data数组  
		data[k++] = left[i];
	for (j; j<n2; j++) //如果右数组有元素剩余,则将剩余元素合并到data数组  
		data[k++] = right[j];
}

void mergeSort(int *data, int p, int r)
{
	int q;
	if (p < r) //只有一个或无记录时不须排序   
	{
		q = (int)((p + r) / 2);      //将data数组分成两半     
		mergeSort(data, p, q);   //递归拆分左数组  
		mergeSort(data, q + 1, r); //递归拆分右数组  
		merge(data, p, q, r);    //合并数组  
	}
}
int main()
{
	int n;
	cout << "请输入数组的长度: ";
    cin >> n;	
	int* input = new int[n];
	cout << "请对数组赋值: " << endl;;
	for (int i = 0; i<n; ++i)
		cin >> input[i];     
	mergeSort(input, 0, n - 1);  
	cout << "合并排序后数组: " << endl;;
	for (int i = 0; i<n; ++i)
		cout << input[i] << " ";
	cout << endl;
	delete []input;
	system("pause");
	return 0;
}

代码参考:http://blog.sina.com.cn/s/blog_4d3a41f401010jbf.html

运行结果:


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

常见排序算法--合并排序 的相关文章

  • Markdown快速入门教程

    Markdown 的目标是实现 易读易写 并强调它的 可读性 因此Markdown 的语法全由标点符号所组成 并经过严谨慎选 是为了让它们看起来就像所要表达的意思 以下是Markdown 大部分的语法 常用语法 文字样式 文字字体 类别 语
  • float,flex和grid布局

    页面布局往往会影响着整体的结构与项目的样式 通常我们用的布局方式有三种 float flex grid 1 float或position布局 1 1概念 首先对于一个页面来说 有浮动流 文档流 文本流这几种模式 而float布局则是脱离文档
  • MySQL的架构体系

    在对MySQL深入的学习之前 我们首先要了解MySQL的一个完整的架构 首先了解到MySQL是一个开源的数据库管理系统 它相对于Oracle更加地轻量 成本低 随着功能的日益完善 它也变得备受企业的喜爱 尤其是中小企业 有图可知 MySQL
  • 京东云高可用业务架构建设

    本文以 2022 年一个实际项目为基础 来演示在京东云上构建高可用业务的整个过程 公有云及私有云客户可通过使用京东云的弹性 IAAS PAAS 服务 创建高可用 高弹性 高可扩展 高安全的云上业务环境 提升业务 SLA 提升运维自动化水平
  • 某大型项目 三巡工作(服务器巡检脚本)

    bin bash 参数定义 date date Y m d H M S centosVersion awk print NF 1 etc redhat release VERSION date F 日志相关 LOGPATH tmp awr
  • 2022 年企业 Java 面试前复习的正确姿势(已助力 512 人入职大厂)

    前言 这份面试清单是今年 1 月份之后开始收集的 一方面是给公司招聘用 另一方面是想用它来挖掘在 Java 技术栈中 还有一些知识点是我还在探索的 我想找到这些技术盲点 然后修复它 以此来提高自己的技术水平 说实话刚开始的时候整理这些面试题
  • Docker第二篇-Linux和Windows下安装Docker

    文章目录 Docker版本说明 CentOS安装Docker 前提条件 安装 镜像加速 删除Docker CE Windows安装Docker 前提条件 安装 镜像加速 Docker版本说明 Docker 分为 CE 和 EE 两大版本 C
  • 树莓派烧录

    准备工作 树莓派 一张SD卡 SD尽可能的大 不然安装完系统 就没什么空间了 建议64G 软件准备 1 洗卡软件 SDcard Formatter 2 烧录软件 win32diskimager 3 镜像文件 可以从树莓派官网进行下载Rasp
  • MySQL数据行溢出的深入理解

    一 从常见的报错说起 故事的开头我们先来看一个常见的sql报错信息 相信对于这类报错大家一定遇到过很多次了 特别对于OMG这种已内容生产为主要工作核心的BG 在内容线的存储中 数据大一定是个绕不开的话题 这里的数据 大 远不止存储空间占用多
  • jenkins搭建自动化部署(Windows)

    官网 https jenkins io 选择相应版本下载 安装后找到安装目录下jenkins war 可以放在tomcat下运行 也可直接运行命令 java jar jenkins war 启动 关闭命令 net start jenkins
  • mysql 5.6压缩安装_mysql5.6zip格式安装过程

    第一步 到官网下载mysql 5 6 44 winx64的压缩包文件格式 第二步 在我的电脑 gt 属性 gt 高级 gt 环境变量 path变量中添加mysql bin文件夹的路径 第三步 配置完环境变量之后先别忙着启动mysql 我们还
  • 08-分布式

    1 分布式中 接口的幂等性的设计 在高并发场景的架构里 幂等性是必须得保证的 比如说提交作业 查询和删除不在 幂等讨论范围 1 建唯一索引id 每次操作 都根据操作和内容生成唯一的id 在执行之前先判断id是否存在 如果不存在 则 执行后续
  • rem的使用方式

    rem是什么 rem是指相对于根元素的字体大小的单位 在日常开发过程中我们通常把根元素 html body 的字体设置为10px 方便于我们计算 此时子元素的1rem就相当于10px rem与em的区别 各自的优缺点 em子元素字体大小的e
  • CVPR 2019 论文大盘点—人体姿态篇

    CV君盘点了CVPR 2019 中有关人体姿态的论文 其中研究 3D人体姿态估计的论文最多 有 11 篇 研究 2D 姿态估计的 7 篇 姿态迁移 2 篇 人体图像生成 1 篇 人体捕捉 2 篇 另外还有2篇创建了新的基准数据集 姿态估计是
  • python云图

    安装相关插件 python3 m pip install jieba wordcloud matplotlib import matplotlib pyplot as plt import jieba from wordcloud impo
  • 【Spring Boot】【前后端分离】后端接口返回结果统一封装

    文章目录 创建 SpringBoot 项目 封装返回结果 实现返回对象的自动封装 处理异常 测试 最近在尝试使用前后端分离的模式写一个简单的个人博客 遇到接口数据返回结构的问题 在网上查了一圈 发现了一个很好用的方法 在复现的过程中也遇到了
  • 算法设计与分析课后总结

    算法设计与分析课后总结 算法设计与分析 第1章 算法设计基础 课后习题 第二章算法分析基础 课后习题 1 考虑下面算法 回答下列问题 算法完成什么功能 算法的基本语句时什么 基本语句执行了多少次 2 分析以下程序段中基本语句的执行次数 要求
  • 100天精通Python(可视化篇)——第92天:Pyecharts绘制炫酷柱状图、条形图实战大全

    文章目录 专栏导读 1 基础柱状图 2 旋转x轴标签 3 旋转坐标轴 4 添加坐标轴名称 5 添加标记点 6 添加标注线 7 添加数据 8 添加自定义背景图 9 堆叠柱状图 10 柱状图与折线图组合 11 三维柱状图 12 水平滑动 鼠标滚
  • 包、模块、函数的关系结构

    三者关系 python中程序的结构是由包 模块 函数 类大致构成 其关系如下 package module function 模块定义与调用 1 python中一个 py文件都可以是一个module module可以有函数 类 代码组成 如
  • 使用python解决中英混合参考文献中et al 和等的问题

    这个代码使用zipfile将docx进行解压 然后操作document xml文件 找到中文中的et al之后替换为 等 然后再压缩为docx import zipfile import re import os import shutil

随机推荐

  • curl服务器文件,curl 向远程服务器传输file文件

    public function upload 获取上传文件信息 文件名称以自己实际上传文件名称为准 fileinfo FILE filename 请求参数 依据商户自己的参数为准 requestParam version requestPa
  • 声网(agora)音视频通话sdk—微信小程序demo

    首先需要注册一个声网账号 注册成功后创建项目 appid是指声网项目的appid 后续会在小程序的配置文件中用到 微信小程序接入视频通话 需要声网给开通小程序的权限 给声网邮箱发送邮件 注明开通微信小程序接入权限 并给发送appid app
  • Python代码扫描:企业级代码代码安全漏洞扫描Bandit

    目录 什么是Bandit 特点 安装 配置 配置Bandit Pycharm配置外置工具 使用实践 命令行参数 检查单个文件 检查整个目录 PyCharm中对单个文件或者项目目录的扫描 一个使用案例 应用场景 总结 参考资料 注意 后续技术
  • js DOM

    DOM Document Object Model HTML 和 XML 文档的编程接口 通过 DOM JavaScript 能够访问和改变 HTML 文档的所有元素 1 查找 通过 id 查找 HTML 元素 div div 2 通过标签
  • Paper and Codes Leaderboard

    目录 介绍 模型入选标准 1 目标检测 Paper and Codes for COCO by 2023 3 31 COCO FPS Models by 2023 02 18 Look at Batch Size 2 图像分类 ImageN
  • 【Backbone: MLP-Mixer】MLP-Mixer: An all-MLP Architecture for Vision

    Abstract CNN和attention based结构很棒 但不是必须的 本文提出MLP Mixer 一种基于多层感知机 MLPs 的框架 包含两种layers 1 channel mixing MLPs 应用在image patch
  • C++(30)——lambda表达式原理及应用

    lambda lambda这个词起源于数学上的 在C 中利用lambda表达式 可以方便的定义和创建匿名函数 lambda可以看做函数对象的升级版 改进了函数对象以下的缺点 使用在泛型算法中的参数传递的过程中 比较性质 自定义操作 优先级队
  • J2EE之自定义MVC框架知识(中篇)

    J2EE之自定义MVC框架知识 中篇 文章目录 J2EE之自定义MVC框架知识 中篇 前言 1 优化中央控制器中的action容器 使其加载变成可配置的 1 1 编写 xml文件 config xml 1 2 导入XML建模相关的类 Act
  • INNO setup 制作安装包

    1 获取SQLserver安装路径vardbpath string rtn boolean rtn RegQueryStringValue HKEY LOCAL MACHINE SOFTWAREMicrosoftMSSQLServerSet
  • 95-38-150-Buffer-CompositeByteBuf

    文章目录 1 概述 2 继承关系 1 概述 CompositeByteBuf实际就是个ByteBuf的包装器 它将多个ByteBuf组合成一个集合 然后对外提供统一的ByteBuf接口 2 继承关系
  • 对象,我遇见了你

    对象 什么是对象 对象属性 Object assign Object create Object is Object keys Object values Object entries Object fromEntries Object t
  • Day 21 B. T-primes

    Problem We know that prime numbers are positive integers that have exactly two distinct positive divisors Similarly we l
  • Windows下安装nvm及搭建Angular环境的步骤整理

    环境 操作系统 windows 8 1 安装nvm nvm windows 下载https github com coreybutler nvm windows releases 我把nvm noinstall zip解压到c dev nv
  • PS2汉化1 字库处理

    引语 其实字库处理很难说有一个统一的方法 不同的程序都需要不同方法来处理 关于常见位图字库的详细信息 下面是字库存在于ELF ERX文件时的处理思路 字模替换 最天真朴素 最通用的处理方式 适用于原字库大小能够塞下汉化所用的全部文字的情况
  • XSS、CSRF攻击以及预防手段

    文章目录 XSS 反射型 持久型 DOM型 XSS如何防御 CSRF XSS XSS全程Cross Site Scripting 名为跨站脚本攻击 是一种常见于 Web 应用中的计算机安全漏洞 恶意攻击者往 Web 页面里嵌入恶意的客户端脚
  • 【VBA编程】VBA基础语法(一)

    一 VBA中的数据类型 VBA里的数据类型有 字节型 Byte 整数型 Integer 长整数型 Long 单精度浮点型 Single 双精度浮点型 Double 货币型 Currency 小数型 Decimal 字符串型 String 日
  • 《数据清洗》第五章操作实例

    案例一介绍 通过Kettle工具 消除CSV文件merge csv中完全重复的数据 1 打开Kettle工具 创建转换 通过使用Kettle工具 创建一个转换repeat transform 并添加 CSV文件输入 控件 唯一行 哈希值 控
  • 把多页Word文档缩小打印到同一张纸上

    方法一 首先要确定纸张的大小和方向 系统默认的是 A4 纸 方向纵向 如果要改变 可单击 文件 页面设置 进行相应的更改 单击 插入 文本框 横排 然后在刚才新建的文档中画出一个文本框 大小大约为这页纸的四分之一 然后将鼠标放到该文本框的边
  • 关于某些特殊时候按钮disabled属性失效时的解决办法

    今天遇到了一个BUG 导致下一步按钮中的属性即时有disabled时 点击按钮依然会触发按钮的点击事件 以下为下一步按钮的JS代码 下一步 btn step click function e if this hasClass layui b
  • 常见排序算法--合并排序

    思路 将一个无序的序列分组 直至分为每两个元素一组 如果有单个元素剩余 则可以剩余的单个元素自己一组 小组内排序 然后合并成一个有序的序列 例子 排序过程如图所示 图片摘选自 https blog csdn net ZY cat artic