首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

合并排序代码在C++中的实现

合并排序是一种经典的排序算法,它通过将待排序的数组分割成两个子数组,分别对子数组进行排序,然后将两个有序的子数组合并成一个有序的数组。以下是在C++中实现合并排序的代码示例:

代码语言:cpp
复制
#include <iostream>
using namespace std;

// 合并两个有序数组
void merge(int arr[], int left, int mid, int right) {
    int n1 = mid - left + 1;
    int n2 = right - mid;

    // 创建临时数组
    int L[n1], R[n2];

    // 将数据复制到临时数组
    for (int i = 0; i < n1; i++)
        L[i] = arr[left + i];
    for (int j = 0; j < n2; j++)
        R[j] = arr[mid + 1 + j];

    // 合并临时数组
    int i = 0, j = 0, k = left;
    while (i < n1 && j < n2) {
        if (L[i] <= R[j]) {
            arr[k] = L[i];
            i++;
        } else {
            arr[k] = R[j];
            j++;
        }
        k++;
    }

    // 复制剩余元素
    while (i < n1) {
        arr[k] = L[i];
        i++;
        k++;
    }
    while (j < n2) {
        arr[k] = R[j];
        j++;
        k++;
    }
}

// 合并排序
void mergeSort(int arr[], int left, int right) {
    if (left < right) {
        int mid = left + (right - left) / 2;

        // 分割数组并递归排序
        mergeSort(arr, left, mid);
        mergeSort(arr, mid + 1, right);

        // 合并排序后的数组
        merge(arr, left, mid, right);
    }
}

// 测试代码
int main() {
    int arr[] = {12, 11, 13, 5, 6, 7};
    int n = sizeof(arr) / sizeof(arr[0]);

    cout << "原始数组:";
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
    cout << endl;

    mergeSort(arr, 0, n - 1);

    cout << "排序后的数组:";
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
    cout << endl;

    return 0;
}

这段代码实现了合并排序算法。首先,我们定义了两个函数:merge用于合并两个有序数组,mergeSort用于递归地分割和排序数组。在merge函数中,我们创建了两个临时数组来存储待合并的子数组,并通过比较元素的大小将它们合并成一个有序的数组。在mergeSort函数中,我们首先找到数组的中间元素,然后递归地对左右两个子数组进行排序,最后调用merge函数将两个有序的子数组合并成一个有序的数组。

这段代码的时间复杂度为O(nlogn),其中n是待排序数组的大小。它是一种稳定的排序算法,适用于各种规模的数据集。

腾讯云提供了多种云计算相关产品,例如云服务器、云数据库、云存储等。您可以根据具体需求选择适合的产品进行开发和部署。更多关于腾讯云产品的信息,请参考腾讯云官方网站:https://cloud.tencent.com/

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • iview实现列表远程排序

    iview可以通过给列表每个字段设置sortable: true可以实现字段排序,但是当列表数据量比较多时,列表中会有分页,此时只能对当前页进行排序,针对这个问题,iview中有一个远程排序功能...,可以通过远程排序实现多页数据排序 第一步: Table监听触发排序事件 第二步:将需要排序字段sortable属性值改成custom 第三步:在数据查询对象增加用于字段排序属性...= column.order this.getCustomerList() } 第五步:实体类增加filed字段何sortType字段 /** * 根据filed字段排序 */ @TableField...; 第六步: mapper根据传递过来参数实现相应排序 <if test="filed == 'fullName' and sortType !...转载请注明: 【文章转载自meishadevs:<em>在</em>iview<em>中</em><em>实现</em>列表远程<em>排序</em>】

    1.8K20

    C++尝鲜:C++实现​​​LINQ!

    导语 | 正式分析libunifex之前,我们需要了解一部分它依赖基础机制,方便我们更容易理解它实现。...没错,c++linq就是c++实现类似C# linq机制,本身其实就是定义一个特殊DSL,相关机制已经被使用在c++20ranges库,以及不知道何时会正式推出execution库,...本篇我们主要围绕已进入标准ranges实现来展开关于c++ linq探讨,同时也将以ranges一段代码为起点,逐步展开本篇相关内容。...我们将在下一章探讨这部分实现机制。...二、特殊DSL实现 其实本质上来说, 这种实现很巧妙利用了部分compiler time特性,最终c++实现了一个从“代码->Compiler->Runtime”一个DSL,后续我们也介绍到

    2K10

    Lua实现对UE4 C++代码自动补全

    本文介绍了Emmylua插件支持下,如何获取到UE4反射信息,并如何生成Emmylua格式Lua注释代码来支持自动补全和跳转。...我们项目接入是slua-unreal,可以提供UE4进行Lua开发基础支持。 不过,如何能够保证UE4进行Lua开发效率?Lua能够像C++或者C#一样支持代码补全和跳转吗?...Emmylua生成C#代码Lua文件做法,是直接在C#代码写死格式。...不过我们格式代码生成是交给构建机定时做,而且生成时间可接受范围内(一般人PC上大约耗时两秒),于是笔者决定采用另一种方案:基于模板引擎来生成代码。...笔者之前用python实现过一个简单模板引擎(如果感兴趣,可以移步这里:从头实现一个简单模板引擎),已经项目中大量使用。因此这次也是直接拿来用也具有最低开发成本。

    6.3K32

    3. exectuions 依赖管道实现 - C++实现LINQ

    没错, c++linq就是c++实现类似C# linq机制, 本身其实就是定义一个特殊DSL, 相关机制已经被使用在c++20ranges库, 以及不知道何时会正式推出execution...库, 作为它们实现基础之一....本篇我们主要围绕已进入标准ranges实现来展开关于c++ linq探讨, 同时也将以ranges一段代码为起点, 逐步展开本篇相关内容. 2....特殊DSL实现 其实本质上来说, 这种实现很巧妙利用了部分compiler time特性, 最终c++实现了一个从 "代码 -> Compiler -> Runtime" 一个DSL,...总结 本篇我们简单介绍了c++ linq, 以及ranges相关机制使用, 也侧重介绍了作为linq Compiler部分Pipeline具体实现.

    22210

    C++ 实现 super 关键字

    突然某一天,我们需要在这数十个子类,有十几个类需要增加某个公有的成员函数 newFunc(),其实现都是一样。...我不想把一模一样代码复制粘贴十几次(不好维护),于是我自然而然地想到:父类实现就好了。 但是问题来了:如果在父类增加实现,自然影响到其他不需要 newFunc()类。...按照继承关系来说,调用祖父类实现是不推荐。 这就需要我们 C++ 代码里,除了修改相关类父类之外,一个一个地实现里修改父类名出现位置。人工操作总有可能出错。... C++ 中使用 super --- 解决方法很简单,以 DerivedBrabo 类为例, DerivedBrabo.h 文件这么写: #ifndef __DERIVED_BRAVO_H__ #...所以比较好方法是将类声明与实现分开,所有的实现都放在 .cpp 文件定义。

    6.1K50

    排序算法JDK应用(二)快速排序

    作者|杨旭 来源|https://blog.csdn.net/Alex_NINE 改进后快速排序 分析上述代码时,可以发现程序会在特殊情况调用sort()方法即改进后得快速排序,接下来就来分析sort...()快速排序代码实现。...These elements will be used for 这些元素将用于下面代码枢轴选择 * pivot selection as described below....Therefore in float and 因此单双精度排序算法我们必须使用更加精确赋值即a[less]=a[great] * double...jdk1.8快速排序sort()源码部分,总结一下主要有以下几个要点 当待排数组长度小于47时就会直接使用插入排序 选择五个均匀间隔元素作为使用不同快速排序方法判断标准 如果五个元素互不相等那么使用双轴快速排序

    1.1K30

    VBA: 冒泡排序代码实现

    文章背景:冒泡排序(Bubble Sort)是排序算法里面比较简单一个排序,在工作中用到并不多,主要是想了解其中算法思想,从而让我们思维更加开阔。...基本原理: 从序列头部开始遍历,两两比较,如果前者比后者大,则交换位置,直到最后将最大数(本次排序最大数)交换到无序序列尾部,从而成为有序序列一部分; 下次遍历时,此前每次遍历后最大数不再参与排序...; 多次重复此操作,直到序列排序完成。...由于排序过程总是小数往前放,大数往后放,类似于气泡逐渐向上漂浮,所以称作冒泡排序。 程序框图:(示例:一维数组,从小到大排列。)...代码实现: Option Explicit Sub BubbleSort() Dim n As Integer, temp As Double Dim i As Integer,

    79820

    排序算法JDK应用(一)归并排序

    作者|杨旭 来源| https://blog.csdn.net/Alex_NINE/article/details/90612759 JDK8排序算法 JDK对于数组排序使用比较是Arrays.sort...()和Arrays.parallelSort(),前者是传统排序算法,后者是JDK8新增并行排序算法,基于fork/join框架,今天主要是分析Arrays.sort()底层实现。...现在我们继续跟踪代码进入sort()内部实现: /** * Sorts the specified range of the array using the given * workspace...array slice if possible for merging * 条件允许情况下,使用给定辅助空间对指定数组范围内进行排序。...,还有个我不是很理解条件就是当带待排序数组相等元素子序列长度大于等于MAX_RUN_LENGTH(33)时就直接使用快速排序

    89030

    「Python实用秘技07」pandas实现自然顺序排序

    本文完整示例代码及文件已上传至我Github仓库https://github.com/CNFeffery/PythonPracticalSkills   这是我系列文章「Python实用秘技」...作为系列第7期,我们即将学习是:pandas实现自然排序顺序。   ...自然排序顺序(Natural sort order),不同于默认排序针对字符串逐个比较对应位置字符ASCII码方式,它更关注字符串实际相对大小意义排序,举个常见例子,假如我们有下面这样一张表,...install natsort完成安装后,利用其index_natsorted()对目标字段进行自然顺序排序,再配合np.argsort()以及pandassort_values()key参数,...就可以通过自定义lambda函数,实现利用目标字段自然排序顺序进行正确排序目的:   可以看到,此时得到排序结果完美符合我们需求~   更多natsort知识欢迎前往https://github.com

    1.2K20

    如何合并Git 代码牛人代码到自己

    github for Windows使用介绍 这篇文章可以很好带我们入门github,同时还带了一个gitshell,这个工具可以运行github所有命令,命令才能干更多事情,比如今天我们要完成一个任务就是如何如何合并...Git 代码牛人代码到自己库。...# 使用commit将快照/索引内容提交到版本库 git commit -m"msg" # 也可以将git add与git commit用一个指令完成 git commit -a-m"msg"...可以用git log 看到,也可以页面上commit标签页里找到. git/github初级运用自如 git/github学习笔记 总结自己Git常用命令 学一点Git--20分钟git快速上手 如何在...github上fork一个项目来贡献代码以及同步原作者修改 Git远程操作详解

    1.1K80

    Nodejs 基于 Stream 多文件合并实现

    本文先从一个 Stream 基本示例开始,有个初步认识,中间会讲 Stream 什么时候会出现内存泄漏,及如何避免最后基于 Nodejs Stream 实现一个多文件合并为一个文件例子。...Linux 下一切皆文件,为了测试,创建可读流时,你可以不创建 test1.txt 文件,让可读流自动触发 error 事件并且将 writeable close 方法注释掉,通过 linux 命令...多个文件通过 Stream 合并为一个文件 上面讲了 Stream 基本使用,最后提到一点设置可读流 end 为 false 可保持写入流一直处于打开状态。...dirname, targetFile)); // 创建一个可写流 streamMergeRecursive(scripts, fileWriteStream); } /** * Stream 合并递归调用.../script.js'); 可以自行实践下,代码放在了 Github 点击 nodejs/module/stream-merge 查看。

    2.5K30

    Linux怎么实现文件拆分和合并

    linux: 文件合并: 创建两个文件a, b :touch a b  cat a > b 是把a内容写到b,b内容会被覆盖 cat a >> b 是把a内容追加到b文件末尾,b...内容不会被覆盖 cat a b > c  是把两个文件重新组合成一个新文件 文件分割: 1,按照分割后文件行数 split -l 行数 源文件 目标文件 2....按照分割后文件大小 split -b 文件大小 源文件 目标文件 切分后默认生成加后缀aa, ab, ac...以此类推, 当然也可以自定义后缀。...split参数: -l  指定每多少行就要切成一个小文件。 -b  指定每多少字就要切成一个小文件。...支持单位:m,k -C  与-b参数类似,但切割时尽量维持每行完整性。

    3.3K20

    怎么isort Python 代码导入语句进行排序和格式化

    快捷命令:isort 提供了命令行工具,可以快速地对代码进行排序。使用 isort 可以大大提高代码可读性和维护性,尤其是多人协作大型项目中,能够帮助团队保持统一编码风格。...如何安装或者引入 isortPython,为了保持代码整洁和有序,我们通常需要对导入模块进行排序。isort是一个非常有用工具,它可以帮助我们自动地完成这个任务。...打开命令行工具,输入以下命令:复制代码pip install isort安装完成后,你可以Python代码通过导入isort模块来使用它。...这有助于提高代码可读性和一致性,也是遵循 PEP 8 风格指南重要一步。1. 标准库导入排序日常开发,我们经常需要从 Python 标准库中导入多个模块。...自定义模块导入排序大型项目中,通常会有多个自定义模块。isort 可以确保你代码自定义模块导入顺序是一致,这对于维护大型项目来说非常有帮助。

    10110
    领券