C++实现合并排序的方法

C++ 是一门功能强大的编程语言,提供了多种排序算法来满足不同场景的需要。其中,合并排序是一种常用的高效排序算法,下面我们就来介绍一下 C++ 实现合并排序的方法。

合并排序算法简介

合并排序算法是一种基于归并操作的排序算法,它的基本思想是将一个数组划分为两个子数组,递归地对这两个子数组分别进行排序,然后将排好序的两个子数组合并成一个有序的数组。该算法的时间复杂度为 O(nlogn),是一种高效的排序算法。

C++ 实现合并排序的方法

下面是 C++ 实现合并排序的一般步骤:

  1. 将待排序数组划分为两个子数组,分别排序;
  2. 将排好序的两个子数组合并成一个有序的数组。

下面给出这些步骤的详细代码实现:

// 合并排序函数
void merge_sort(vector<int>& nums, int begin, int end)
{
    // 判断数组是否为空或只有一个元素
    if (begin >= end) 
        return;

    int mid = begin + (end - begin) / 2;   // 计算中间位置

    // 递归排序左右两部分
    merge_sort(nums, begin, mid);
    merge_sort(nums, mid + 1, end);

    // 合并两个有序数组
    int left = begin, right = mid + 1;
    vector<int> temp;
    while (left <= mid && right <= end) {
        if (nums[left] <= nums[right])
            temp.push_back(nums[left++]);
        else
            temp.push_back(nums[right++]);
    }
    while (left <= mid)
        temp.push_back(nums[left++]);
    while (right <= end)
        temp.push_back(nums[right++]);

    // 将 temp 数组中的元素复制回 nums 数组中
    for (int i = begin; i <= end; ++i)
        nums[i] = temp[i - begin];
}

示例

下面分别以数组 {3,1,5,7,2,4,9,6,8} 和 {9,8,7,6,5,4,3,2,1} 为例,演示一下合并排序的过程。

示例一

输入:{3,1,5,7,2,4,9,6,8}

输出:{1,2,3,4,5,6,7,8,9}

            {3,1,5,7,2,4,9,6,8}
            /                \
       {3,1,5,7}            {2,4,9,6,8}
       /       \              /       \
    {3,1}     {5,7}        {2,4,9}   {6,8}
    /    \    /    \       /     \   /   \
   {3}   {1} {5}   {7}    {2,4}  {9} {6} {8} 
    \     /    \    /      /   \       /   \
   {1,3}  {5,7} {2,4,9}  {6,8,9} {}    {}    {}
     \    /       \        /     \       \   /
   {1,3,5,7}    {2,4,6,8,9}       {8,9}  {6,8}
       \           /                |     |
        \         /                 |     |
         \       /                  |     |
          \     /                   |     |
           \{1,2,3,4,5,6,7,8,9}-----{}  {8,9,6}
                      /                \   /
                     /                  \ /
                  {6,8,9}               {9,8,7,6,5,4,3,2,1}

示例二

输入:{9,8,7,6,5,4,3,2,1}

输出:{1,2,3,4,5,6,7,8,9}

            {9,8,7,6,5,4,3,2,1}
            /                \
           {9,8,7,6}        {5,4,3,2,1}
          /       \          /       \
         {9,8}   {7,6}     {5,4}    {3,2,1}
        /    \   /    \     /   \      /  \
       {9}   {8} {7}   {6} {5}  {4}   {3} {2,1}
        \     /    \    /      \      /    \
       {8,9} {6,7} {4,5} {2,3}  {1}   {1,2} {3}
         \    /      \      /   \   /            \
        {6,7,8,9}   {2,3,4,5}  {1}  {1,2,3}      {1,2,3}
          \             /       \        \         |
           \           /         {1,2,3,4,5,6,7,8,9}   |
            \{1,2,3,4,5,6,7,8,9}                      |
                                      /                \
                                     /                  \
                                  {6,7,8,9}            {1,2,3,4,5}
                                     |                  |
                                     |                  |
                                  {1,2,3,4,5,6,7,8,9}-----{1,2,3,4,5,6,7,8,9}

由上面两个示例可以看出,合并排序可以对任意长度的数组进行排序,其时间复杂度为 O(nlogn) ,这使得它成为了一个非常优秀的排序算法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现合并排序的方法 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • JavaScript实现基础排序算法的示例详解

    JavaScript实现基础排序算法的示例详解 排序算法可以说是计算机科学中最基础的算法之一。而对于前端开发者来说,掌握一些简单的排序算法是很有必要的,因为它们可以帮助我们解决很多实际问题,如搜索结果排序、排名等。在这里,我们将讲解JavaScript如何实现基础排序算法。 冒泡排序 冒泡排序是最简单的排序算法之一。它将数组中的元素两两比较,如果顺序不正确就…

    算法与数据结构 2023年5月19日
    00
  • 深入学习C语言中常见的八大排序

    深入学习C语言中常见的八大排序 前言 排序算法是计算机科学中的基本问题之一,是计算机领域内经典且常见的算法问题之一。排序算法对于优化数据检索、数据压缩、数据库查询效率等方面都有着重要的意义。本文将为您详细讲解常见的八种排序算法的原理、时间复杂度以及应用场景,希望能够对您学习和了解排序算法提供帮助。 简介 排序算法是将一串数据按照一定的规则进行排列,排序算法可…

    算法与数据结构 2023年5月19日
    00
  • C语言实现桶排序的方法示例

    C语言实现桶排序的方法示例 桶排序是一种非常高效的排序算法,它的基本思想是将要排序的数据分到几个有序的桶中,每个桶内部再完成排序,最终按照桶的顺序依次连接起来。在本文中,我们将详细讲解如何使用C语言实现桶排序,并提供两个示例来帮助读者更好地理解它的实现过程。 实现步骤 桶排序的实现过程主要分为以下几个步骤: 创建桶:根据待排序数组的最大值和最小值,确定需要创…

    算法与数据结构 2023年5月19日
    00
  • 深入了解javascript 数组的sort方法

    深入了解JavaScript数组的sort方法 简介 在JavaScript中,数组(Array)是一个非常常用的数据结构,而sort()是Array原型上的非常常用的方法,可用于排序。数组中的元素可以是任何类型,但在排序时,所有元素都将转换为字符串形式,所以有时打算对不同数据类型的元素进行排序,您可能需要使用自定义比较函数。 基本使用方法 sort()方法…

    算法与数据结构 2023年5月19日
    00
  • C语言快速排序函数用法(qsort)

    C语言快速排序函数用法(qsort) 简介 快速排序是一种常见的排序算法,而C语言中的qsort函数则是一种快速排序的实现。使用qsort函数,我们无需自己编写快速排序算法的代码,只需要提供一个排序所需的比较函数即可。使用qsort函数,既可以方便的排序数组,还可以排序链表等数据结构。 函数原型 void qsort(void *base, size_t n…

    算法与数据结构 2023年5月19日
    00
  • PHP排序算法之冒泡排序(Bubble Sort)实现方法详解

    PHP排序算法之冒泡排序(Bubble Sort)实现方法详解 冒泡排序概述 冒泡排序是一种基本的排序算法,它的基本思想是比较相邻的两个元素,如果前一个元素比后一个元素大,就交换这两个元素,重复进行这个过程,直到没有任何一对元素需要比较为止。冒泡排序得名于通过交换相邻的元素来把最大值“冒泡”到数列的尽头。 冒泡排序的时间复杂度为O(n²),效率较低,但其思想…

    算法与数据结构 2023年5月19日
    00
  • C语言直接选择排序算法详解

    C语言直接选择排序算法详解 什么是选择排序算法 选择排序算法(Selection Sort)是一种简单直观的排序算法。该算法每次从未排序的数中选择最小(或最大)的一个数,将其放在已排序数列的末尾,直到所有数排序完成。因为该算法在每次排序后的下一轮排序不会再考虑之前选择的最小(或最大)值,所以属于不稳定排序算法。 算法流程 选择排序算法主要分为两个步骤: 在未…

    算法与数据结构 2023年5月19日
    00
  • java ArrayList按照同一属性进行分组

    要按照同一属性进行分组,我们需要用到Java中的Collections类和Comparator接口。 首先,我们需要为ArrayList中的对象定义一个属性,以便按照该属性进行分组。例如,我们定义一个Person类,其中包含name和age两个属性,我们想要按照年龄进行分组。则代码如下: public class Person { private Strin…

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部