基础指南 之 归并排序

2023-10-27

归并排序

  1. 两个有序数组的归并
    数组 a 和数组 b 都是非降序的数组,数组长度分别为 m 和 n ,将两个数组合并成一个升序数组 c ,程序如下所示:
void merge(int * a,int m,int * b,int n,int * c)
{
    int i,j,k;
    i=j=k=0;
    while(i<m && j<n)
    {
        if(a[i]<b[j])
        {
            c[k++]=a[i++];
        }
        else
        {
            c[k++]=b[j++]
        }
    }
    while(i<m)
    {
        c[k++]=a[i++];
    }
    while(j<n)
    {
        c[k++]=b[j++];
    }
}
  1. 将一个无序数组利用归并排序排列成一个升序数组,程序如下所示。首先递归调用 merge_sort 函数,直至将序列划分成两个单个元素组成的子序列,再调用 merge_array 将两个元素组成的子序列保持升序,再返回到上一层递归,调用 merge_array 将两组由两个元素构成的子序列排成四个元素的升序序列,依次递归,使得整个序列升序。
void merge_array(int * a,int first,int mid,int last,int * tem)
{
    int i=first,m=mid,j=mid+1,n=last;
    int k=first;
    while(i<m && j<n)
    {
        if(a[i]<a[j])
        {
            tem[k++]=a[i++];
        }
        else
        {
            tem[k++]=a[j++];
        }
    }
    while(i<m)
    {
        tem[k++]=a[i++];
    }
    while(j<n)
    {
        tem[k++]=a[j++];
    }
    for (int t = first; t <= last; t++)
    {
        a[t]=tem[t];
    }
    
}

void merge_sort(int * a,int first,int last,int * tem)
{
    if(first<last)
    {
        int mid=(last+first)/2;
        merge_sort(a,first,mid,tem);
        merge_sort(a,mid+1,last,tem);
        merge_array(a,first,mid,last,tem);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基础指南 之 归并排序 的相关文章

  • 安装Ubuntu20.04后时间不准

    安装Ubuntu20 04后时间不准 买了一台瘦客户机 原先是安装Windows操作系统的 后面安装Ubuntu20 04后导致时间一直有问题 不准 解决办法 1 安装 ntpdate sudo apt get install ntpdat
  • Python入门学习01

    基础 输出 输出语句print print 输出语句 输出函数 1 在控制台输出一段文本信息 用一对英文双引号标记 print 文本信息 默认换行 2 print 文本信息 end 结尾 n 换行符 t 制表符 3 print 文本信息1
  • SpringBoot 基础

    1 认识Spring Boot Spring 不同于一般框架 它是一个聚合的框架 通过Spring 框架可以使Java 更为便捷和系统化 Java web 中最为使用的框架为 Spring Framework Spring boot 是 S
  • Java web前端——JavaScript基础使用

    JavaScript概述 1 1 JavaScript简介 JavaScript LiveScript 一种解释性脚本语言 是一种动态类型 弱类型 基于原型继承的语言 内置支持类型 它的解释器被称为JavaScript引擎 为浏览器的一部分
  • 将矩阵&概率画成图

    任何一个矩阵都能画成一个图 更严谨的来说 每个矩阵对应一个加权二分图 所谓图是指点和线的集合 二分是指两种不同的类型 加权是指每条线上都有一个数字标记 上图的三个绿点代表三行 两个红点代表两列 若对应矩阵值非零 则在绿点和红点间画一条线连接
  • 线程通信基础示例(synchronized 与 Lock + Condition实现线程通信)

    目录 一 synchronized 实现线程通讯 代码示例 二 Lock Condition 实现线程通讯 代码示例 Lock Condition 实现线程通讯的优点 一 synchronized 实现线程通讯 什么是线程通讯 可以将线程分
  • java——equals(),hashCode()重写与不重写区别

    1 总结 1 两个obj 如果equals 相等 hashCode 一定相等 2 两个obj 如果hashCode 相等 equals 不一定相等 2 不重写equals hashCode 不重写的时候 比较两个对象是否 相等 默认跟 效果
  • samba Error NT_STATUS_CONNECTION_REFUSED Failed to connect with SMB1 -- no workgroup available

    连接同事的共享服务时报错 smbclient L ip U user WARNING The syslog option is deprecated Enter WORKGROUP administrator s password Shar
  • 学术搜索引擎大全

    学术搜索引擎大全 学术搜索引擎 综合性 Google学术搜索 Scirus学术搜索 BASE搜索 Vascoda搜索 万方数据ilib 百度文档搜索 OJOSE Infomine OA图书馆 开放存取搜索 PDF搜索引擎 SciSeek S
  • eclipse svn 忽略 target/.project /.classpath /.settings等 目录

    问题描述 用eclipse同步项目时 会出现target project classpath settings等与代码无关的文件 介绍两种办法 推荐第二种 方法一 在新建项目的时候 在第一次commit 到 SVN 之前 先在项目的根目录设
  • Numpy--布尔索引

    布尔索引 布尔索引是通过相同数组上的True还是False来进行提取的 提取的条件可以有多个 那么如果有多个 可以使用 来代表且 用来代表或 如果有多个条件 那么每个条件要使用圆括号括起来 布尔运算也是矢量的 比如以下代码 a1 np ar
  • python实现分页

    使用python实现分页功能 当我们有大量数据需要展示时 需要对数据进行分页展示 这时就用到了分页功能 分页使得数据更好的展示给用户 当访问页码数大于总页码数的时候 展示第一页内容 import math content name aa a
  • JAVA--位运算

    java的位运算 什么是位运算 位运算符就是在二进制的情况下对bit位的运算 在计算机当中 数字都是由二进制构成 由一串0或1构成 一个字节是由八位0或1构成 所以一般情况下都是由八位构成 但是最高位都是符号位0为正数1为负数 比如 8 0
  • JavaScript DOM(二)查

    书接上回 节点 DOM中有许多不同类型的节点 接下来我们先看看其中的三种 元素节点 文本节点和属性节点 元素节点 指该html里面标签的名字就是元素的名字 例如 我们使用的 p p ul 和 div 之类的元素 p标签的名字是 p 无序列表
  • 计算机总线仲裁详解

    文章目录 总线仲裁 一 关于总线仲裁 二 总线仲裁的分类 1 集中仲裁方式 1 链式查询方式 2 计数器定时查询方式 3 独立请求方式 2 分布仲裁方式 总线仲裁 一 关于总线仲裁 总线仲裁来由 我们按照对总线有无控制功能将总线上所连接的各
  • 堆和栈的通俗解释【转】

    数据结构的栈和堆 首先在数据结构上要知道堆栈 尽管我们这么称呼它 但实际上堆栈是两种数据结构 堆和栈 堆和栈都是一种数据项按序排列的数据结构 栈就像装数据的桶或箱子 我们先从大家比较熟悉的栈说起吧 它是一种具有后进先出性质的数据结构 也就是
  • ACM-子串(字符串处理)

    问题描述 有一些由英文字符组成的大小写敏感的字符串 请写一个程序 找到一个最长的字符串 x 使得 对于已经给出的字符串中的任意一个 y x 或者是 y 的子串 或者 x 中的字符反序之后得到的新字符串是 y 的子串 输入数据 输入 输入的第
  • oracle如修改表字段的类型(表中有数据)

    如何在数据表有数据的情况下 修改字段类型 看到如何修改表字段类型 我想大多数人都觉得直接用修改语句 ALTER TABLE 表名 MODIFY 列名 类型 如果是修改多个字段就在后面继续 modify ALTER TABLE 表名 MODI
  • JS函数(二)基础 return 返回值

    创建函数 function 函数名 形参变量列表 函数体 return 返回值 return 1 什么是 返回 return语句将终止当前函数并返回当前函数的值 2 为什么要用 我们先来看一组代码
  • Unity中实现倒计时的几种方式

    1 Time time using UnityEngine public class TimeTest MonoBehaviour public float secound 10 void Update Timing private flo

随机推荐

  • 统计与分布之伯努利分布与二项分布

    目录 目录 前文列表 伯努利分布 二项分布 前文列表 计数原理 组合与排列 统计与分布之高斯分布 统计与分布之泊松分布 伯努利分布 伯努利分布 Bernoulli Distribution 是一种离散分布 又称为 0 1 分布 或 两点分布
  • 测试用例编写

    今天主要编写了办公模块下快速创建板块中的测试用例 快速创建提日志 多个功能点钟含有相同的功能 而且功能以模块的形式呈现 包含的功能较多 可以把该模块提取出来单独编写测试用例 这样就不用再每个功能点下重复编写 在快速创建日志中 日报 周报 月
  • The kdb Kernel Debugger

    The kdb Kernel Debugger Many readers may be wondering why the kernel does not have any more advanced debugging features
  • leetcode:62. 不同路径

    题目来源 leetcode 题目描述 题目解析 从暴力搜索到动态规划 暴力搜索 class Solution 机器人从 i j 走到 m n 一共有几种方法 int process int i int j int m int n if i
  • ASP + SQL Server聊天室设计实例

    ASP SQL Server聊天室设计实例 目 录 第一章 绪论 1 1 设计思想 1 2 开发工具和相关技术简介 第二章 聊天室总体分析和设计 2 1 聊天室的运行原理 2 2 聊天室的功能 2 3 聊天室的页面结构设计 2 4 聊天室的
  • hive之full outer join(全连接)使用方法

    目录 介绍 语法 例子 创建顾客表 customers 创建订单表 orders full outer join语句 left join union right join语句 介绍 full outer join结合了 LEFT JOIN
  • vue 指定元素滚动到页面可视区域

    使用场景 1 点击页面tab 或步骤条的某一步 使其对应元素滚动到页面可视区域 2 使遍历而来的list滚动到页面可视区域 实现 使用el scrollIntoView API实现 scrollIntoView 方法会滚动元素的父容器 使被
  • db2 replace函数的用法_高效的10个Pandas函数,你都用过吗?

    作者 Soner Y ld r m 来源 towardsdatascience 翻译 编辑 Python大数据分析 Pandas是python中最主要的数据分析库之一 它提供了非常多的函数 方法 可以高效地处理并分析数据 让pandas如此
  • 类模板 构造函数_C++ 类模板(学习笔记:第9章 02)

    类模板 1 类模板的作用 使用类模板使用户可以为类声明一种模式 使得类中的某些数据成员 某些成员函数的参数 某些成员函数的返回值 能取任意类型 包括基本类型的和用户自定义类型 类模板的声明 类模板 template lt 模板参数表 gt
  • oracle 查询随机数据结构,批量随机键值查询测试

    摘要 当数据量巨大时 使用大批量随机键值集获取对应记录集合 不仅仅考验数据库软件本身 更在于程序员对数据的理解 如何在硬件资源有限的情况下将性能发挥到极致 点击 批量随机键值查询测试 来乾学院一探究竟 本次测试主要针对集算器组表索引实现的批
  • 15个 Android 通用流行框架

    转载自 http www techug com 15 android framework biz MjM5OTA1MDUyMA mid 407358558 idx 2 sn b21877f23bf4063fa311185009c1f0b7
  • PLSQL显示优化

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 首选项 Tools gt Preferences 1 字体大小调整 高分屏看的清 2 设置关键字自动大写 3 设置关键字颜色 实现效果 转载于 https my oschi
  • kdj超卖_KDJ买卖口诀:“J值大于100逐步卖,J值接近负值逐步买”,从贫穷到富有原来如此简单...

    KDJ指标又叫随机指标 是一种相当新颖 实用的技术分析指标 指标构成 K线是快速确认线 数值在90以上就是超买 数值在10以下就是超卖 D线是慢速主干线 数值在80以上就是超买 数值在20一下就是超卖 J线是方向敏感线 当J值大于100 特
  • 编程小记—— C/C++中 x & -x 表示含义

    说明 看多了各种优秀看源代码的经常会遇到一些很常见的公式 本篇文章记录的 x x 就是其中的一种 含义 我们都知道 x 的值 其实就是在x的值的基础上进行按位取反 x 之后在增加1所得 也就是说 x x x x 1 x 为偶数 我们都知道
  • web信息收集

    title 信息收集 tags null categories 信息收集 null date 2021 03 20 18 40 54 keywords top img cover updated sticky description cop
  • 用 request请求对象 获取请求头里的 信息

    1 根据请求头名称获取一个值 String connection request getHeader connection System out println connection System out println getHeader
  • 8个重构技巧使得Python代码更Pythonic

    1 合并追加到列表声明 我们从一个简单的开始 不是声明一个空列表然后附加到它 而是直接用所有元素初始化列表 这缩短了代码并使意图更加明确 它的性能也稍微好一些 因为它避免了对 append 的函数调用 这同样适用于填充其他集合类型 如集合和
  • Angular4.0_开发准备

    启动Angular过程介绍 启动时加载了哪个页面 启动时加载了哪些脚本 这些脚本做了什么事 默认情况下是index对应的文件是启动时加载的页面 main ts是启动时的起点文件 main ts 核心模块提供的enableProdMode用来
  • 多媒体指令(灰度像素最大值)

    如果不是处理的灰度图像 那么最大值也就没什么意思了 彩色图也可以转成灰度图嘛 虽然用了汇编 不过没有使用多媒体指令 灰度图像的RGB都一样 没必要使用mmx寄存器了 直接对单个字节处理就行了 获得最小值和获得最大值原理一样 只需改一个指令
  • 基础指南 之 归并排序

    归并排序 两个有序数组的归并 数组 a 和数组 b 都是非降序的数组 数组长度分别为 m 和 n 将两个数组合并成一个升序数组 c 程序如下所示 void merge int a int m int b int n int c int i