归并排序——将两个有序表直接归并为一个有序表

2023-11-07

归并排序是多次将两个或两个以上的有序表合并成一个新的有序表。最简单的归并是直接将两个有序的子表合并成一个有序的表,即二路归并

二路归并的排序基本思想是:

       将a[0……n-1]看成是n个长度为1的有序序列,然后进行两两归并,得到n/2(向上取整)个长度为2(最后一个有序序列的长度可能为1)的有序序列,再进行两两归并,得到n/4(向上取整)个长度为4(最后一个有序序列的长度可能小于4)的有序序列……直到得到一个长度为n的有序序列

归并排序每趟产生的有序区只是局部有序的,也就是说在最后一趟排序结束前,所有元素并不一定归位了

每次从两个段中取出一个元素进行关键字的比较,将较小者放入c[ ]中,最后将各段余下的部分直接复制到c[ ]中

#include<stdio.h>
#include<iostream>
using namespace std;
//a[]、b[]为需要合并的两个数组,c为合并后的新数组,n为a[]的长度,m为b[]的长度
void merge(int a[],int b[],int c[],int n,int m){
	int i=0,j=0,k=0;//i为a[]的下标,j为b[]的下标,k为c[]的下标	
	//在a[]和b[]均未扫描完时循环
	while(i<n && j<m){
		if(a[i]<=b[j])
		   c[k++]=a[i++];
		else
		   c[k++]=b[j++];
	}
	//如果a[]还有剩余,则将余下部分赋值过去
	while(i<n){
	   c[k++]=a[i++];
	}
	//如果b[]还有剩余,则将余下部分赋值过去
	while(j<m){
	   c[k++]=b[j++];
	}
}
int main(){
  int n,m;//n为a[]的长度,m为b[]的长度
   //初始化
  //数组a[]
  cout<<"n:";
  cin>>n;
  int *a=new int[n];
  cout<<"输入"<<n<<"个数的第一个有序列表:";
  for(int i=0;i<n;i++){
     cin>>a[i];
  }
  //数组b[]
  cout<<"m:";
  cin>>m;
  int *b=new int(m);
  cout<<"输入"<<m<<"个数的第二个有序列表:";
  for(int i=0;i<m;i++){
     cin>>b[i];
  }
  int *c=new int(n+m);//c为合并后的数组
 //归并两个有序列表
  merge(a,b,c,n,m);
  //输出
  cout<<"合并后为:"; 
  for(int i=0;i<n+m;i++){
    cout<<c[i]<<" ";
  }
  cout<<endl;
}

 

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

归并排序——将两个有序表直接归并为一个有序表 的相关文章

  • [Android]从零开始的内核编译

    从零开始的内核编译 本教程将基于小米 10S 的内核源码进行实例 其他型号的手机请自行寻找内核源码 具体内容可以参考我的内核编译项目 手机型号查询 1 获取设备 手机 代号 在安卓设备终端 adb shell 上执行 getprop gre
  • 检测之VOC转COCO

    文章目录 1 获取标注文件及label名与ID对应关系 1 1 获取label2id及标注xml路径 2 xml格式转coco 检测系列相关文章参考如下链接 VOC数据的结构介绍及自定义生成 用labelimg自已标注 VOC标准数据的生成
  • Servlet 作业

    一 填空题 1 Servlet 中使用Session 对象的步骤为 调用HttpServletRequest getSession 的得到Session对象 查看Session对象 在会话中保存数据 2 http 全称是 HyperText
  • Python 计算机视觉(二) —— OpenCV 基础

    目录 1 安装配置 2 OpenCV 基础语法 1 读取图像并显示 2 调整显示窗口大小 3 调整图像尺寸大小 4 图像灰度处理 3 几何图形绘制 1 绘制线段 2 绘制矩形 3 绘制圆形 4 绘制椭圆 5 添加文本 总结 1 安装配置 打
  • ssh遇到port 22:No route to host问题

    ssh遇到这个port 22 No route to host的这个问题其实是比较常见的问题 通常是两个思路 检查防火墙状态 检查ssh状态 这两个方面的解决方案非常常见 无非就是查看这两个 防火墙是否关闭和ssh是否正在运行 大家自行百度
  • SpringCloud 使用sentinel

    一 添加依赖
  • 都2023年了,还有必要学SSH框架吗

    在Web开发中 框架是开发效率和代码质量的保障 SSH框架是指结合了Struts2 Spring和Hibernate3三个开源框架所形成的一种框架 那么 在2023年 我们是否仍然需要学习SSH框架呢 本文将进行探讨 分析SSH框架的优缺点
  • 高中信息技术python知识点_高中信息技术《Python语言》模块试卷

    高中信息技术 Python语言 模块试卷 由会员分享 可在线阅读 更多相关 高中信息技术 Python语言 模块试卷 3页珍藏版 请在人人文库网上搜索 1 区县 姓名 座号 密 封 线 高中信息技术Python语言模块试卷本试卷分为五大题
  • 攻防世界Web:Web_php_wrong_nginx_config

    首先进来是一个登录页面 通过御剑扫描 发现了robots txt 打开发现两个php文件 hint php Hack php是跳转到登录页面 抓包看看Hack php 发现了可疑的点Cookie isLogin 0 不妨修改为1 进入控制中
  • Docker 自动启动和容器自动启动

    一 docker 服务启动启动 开启 docker 自启动 systemctl enable docker service 关闭 docker 自启动 systemctl disable docker service 二 docker 容器
  • C++ 线程局部变量thread_local

    本文转自 https blog csdn net aguoxin article details 103968031 Linux中的线程局部存储 一 本章节转自 https blog csdn net cywosp article deta
  • 北京大学肖臻老师《区块链技术与应用》公开课笔记13——BTC匿名性篇2(零知识证明)

    北京大学肖臻老师 区块链技术与应用 公开课笔记 比特币回顾问答篇 对应肖老师视频 click here 全系列笔记请见 click here About Me 点击进入我的Personal Page 匿名性部分第一节 匿名性分析请见 cli
  • UncaughtExceptionHandler异常处理机制

    解释 UncaughtExceptionHandler类是java1 5里新增的 Thread类里面的一个函数式接口类的 类名意思为 未捕获的异常处理 该类的注释接口意思 接口处理器时调用线程突然终止 由于未捕获到异常 当一个线程要终止由于

随机推荐

  • mysql json字段长度_mysql5.7 新增的json字段类型

    一 我们先创建一个表 准备点数据 CREATE TABLE json test id int 11 unsigned NOT NULL AUTO INCREMENT COMMENT ID json json DEFAULT NULL COM
  • java什么场景使用克隆,Java设计模式----原型模式(克隆模式)

    场景 思考一下 克隆技术是怎么样的过程 JavaScript语言中的 继承怎么实现 那里面也有prototype 原型模式 通过new产生一个对象需要繁琐的数据准备或访问权限 则可以使用原型模式 就是java中的克隆技术 以某个对象为原型
  • Qt 搜索框

    一 前言 用户需要输入文本时 可使用QLineEdit控件进行编辑输入 缺点是样式相对单一 在使用百度搜索输入框时 发觉比较人性化 故采用QLineEdt QPushButton通过css样式实现自定义搜索框控件 包含如下功能 1 可设置占
  • 用 ChatGPT 解锁生成式游戏#StoryGames.AI

    生成式游戏 AI 是一种基于人工智能技术 自动生成游戏故事情节 关卡 角色等内容的游戏 AI ChatGPT 的发展生成式游戏 AI 产生了重要影响 为游戏开发者提供了更加灵活 自由的创作方式 每个人都有机会开发自己的专属游戏 StoryG
  • 调试最长的一帧(第16天)

    终于到达绘制了 先看总体流程阶段 然而 从并行堆栈上看 已经有渲染线程开启了 跟着电子书走 先是介绍 抄一抄 加深印象 osg的场景渲染过程可以简单地分为三个阶段 用户APP阶段 更新用户数据 负责场景对象的运动和管理等 筛选cull阶段
  • 这是基于maven管理的SpringBoot项目的mongodb测试笔记,只测试了最基本的增删改查和一些踩过的坑。

    这是基于maven管理的SpringBoot项目的mongodb测试笔记 只测试了最基本的增删改查和一些踩过的坑 一 项目的依赖配置
  • 小米万兆路由器安装homeassistant并接入homekit教程

    1 做好准备工作 正常运行docker并启动docker命令行 参考参考链接中的b站视频 2 拉取homeassistant docker pull homeassistant home assistant 3 设置homeassistan
  • 浅谈依赖注入

    最近几天在看一本名为Dependency Injection in NET 的书 主要讲了什么是依赖注入 使用依赖注入的优点 以及 NET平台上依赖注入的各种框架和用法 在这本书的开头 讲述了软件工程中的一个重要的理念就是关注分离 Sepa
  • mysql数据库的优缺点

    优点1 通常存储过程 标题有助于提高应用程序的性能 因为当你创建他的时候就已经编译了 只不过是按需编译的 2 存储过程有助于减少应用程序和数据库服务器之间的流量 因为应用程序不必发送多个冗长的SQL语句 而只能发送存储过程的名称和参数 3
  • IDEA卡死解决

    找到IDEA的安装目录bin 修改这个文件 修改为 Xms128m Xmx1024m XX MaxPermSize 250m XX ReservedCodeCacheSize 150m
  • STM32外部中断

    参考正点原子视频 外部中断概述 外部中断是单片机实时地处理外部事件的一种内部机制 当某种外部事件发生时 单片机的中断系统将迫使CPU暂停正在执行的程序 转而去进行中断事件的处理 中断处理完毕后 又返回被中断的程序处 继续执行下去 STM32
  • 大疆无人机的新玩法?Payload SDK 了解一下

    一则小新闻 两个新产品 美国时间 3 月 28 日 大疆在加州门洛帕克的消防局总局低调发布了两款新的产品 一款是此前与 FLIR 合作开发的热成像相机 Zenmuse XT 的升级产品 Zenmuse XT2 另一款则是钟德夫更为关注并且会
  • h5 实现一键复制到粘贴板 兼容iOS

    效果展示 先贴上测试连接 http cdn foundao com zhaosheng copytext 实现原理 采用 document execCommand copy 来实现复制到粘贴板功能 复制必须是选中input框的文字内容 然后
  • JNDI数据源的连接属性

    如果无须HIbernate自己管理数据源 而是直接访问容器管理数据源 Hibernate可使用JNDI Java命名目录接口 数据源的相关配置 下面是连接JNDI数据源的主要配置属性 hibernate connection datasou
  • Java 加减乘除 int、long、float、double四种类型

    在学习了基本数据类型之后 内容如下 计算题 假如今天逛超市花了99 99 请用加减乘除 进行计算得到99 99这个结果 要求 1 4个方法 2 数值随意编写 3 数值要用到int long float double四种类型 4 都是返回值
  • Win10在BIOS中如何启用虚拟化(VT)

    文章目录 1 VT技术简介 2 如何进入BIOS 3 如何在BIOS中开启VT 1 VT技术简介 VT 就是虚拟化技术 Virtualization Technology 的缩写 Intel VT就是指Intel的虚拟化技术 这种技术简单来
  • ThreadLocal使用 --用于保存每个登录用户的信息-userInfo

    有时我们需要知道每个用户的登录信息 一般我们是将登录的用户信息是保存在session范围内 而我们在DAO中要是使用用户的某些信息 比哪录录ID 单位ID之类的信息进行过滤时 需要从从control 层传到 sevice层 再传到DAO层
  • 服务器的tls协议,ssl – Nginx中每台服务器的不同TLS协议

    这似乎是Nginx中的一个错误 我也在https serverfault com a 827794 318927发布了这个答案 它始终只使用第一个服务器块中的ssl protocols指令并忽略任何后续服务器块 在我的情况下 我有许多虚拟服
  • C/C++项目调用外部exe程序方法

    前言 在开发项目的时候 有的时候需要调用外部exe文件 那么在C C 里面直接调用exe文件的方法有哪些呢 现在可考虑的方法主要有 使用system函数 使用execl或者execv函数 使用WinExec函数 使用CreateProces
  • 归并排序——将两个有序表直接归并为一个有序表

    归并排序是多次将两个或两个以上的有序表合并成一个新的有序表 最简单的归并是直接将两个有序的子表合并成一个有序的表 即二路归并 二路归并的排序基本思想是 将a 0 n 1 看成是n个长度为1的有序序列 然后进行两两归并 得到n 2 向上取整