C++归并排序算法实例

 更新时间:2014年10月09日 09:10:40   作者:果冻想  
这篇文章主要介绍了C++归并排序算法实例,本文先是介绍了什么是归并排序,然后给出了实现代码,需要的朋友可以参考下

归并排序

归并排序算法是采用分治法的一个非常典型的应用。归并排序的思想是将一个数组中的数都分成单个的;对于单独的一个数,它肯定是有序的,然后,我们将这些有序的单个数在合并起来,组成一个有序的数列。这就是归并排序的思想。它的时间复杂度为O(N*logN)。

代码实现

复制代码 代码如下:

#include <iostream>
using namespace std;
 
//将有二个有序数列a[first...mid]和a[mid...last]合并。
void mergearray(int a[], int first, int mid, int last, int temp[])
{
     int i = first, j = mid + 1;
     int m = mid,   n = last;
     int k = 0;
 
     while (i <= m && j <= n)
     {
          if (a[i] <= a[j])
               temp[k++] = a[i++];
          else
               temp[k++] = a[j++];
     }
 
     while (i <= m)
          temp[k++] = a[i++];
 
     while (j <= n)
          temp[k++] = a[j++];
 
     for (i = 0; i < k; i++)
          a[first + i] = temp[i];
}
void mergesort(int a[], int first, int last, int temp[])
{
     if (first < last)
     {
          int mid = (first + last) / 2;
          mergesort(a, first, mid, temp);    //左边有序
          mergesort(a, mid + 1, last, temp); //右边有序
          mergearray(a, first, mid, last, temp); //再将二个有序数列合并
     }
}
 
bool MergeSort(int a[], int n)
{
     int *p = new int[n];
     if (p == NULL)
          return false;
     mergesort(a, 0, n - 1, p);
     delete[] p;
     return true;
}
 
int main()
{
     int arr[] = {2, 1, 4};
     MergeSort(arr, 3);
 
     for (int i = 0; i < 3; ++i)
     {
          cout<<arr[i]<<" ";
     }
     cout<<endl;
}

相关文章

  • Qt音视频开发之音频播放QAudioOutput的实现

    Qt音视频开发之音频播放QAudioOutput的实现

    这篇文章主要为大家详细介绍了如何利用Qt实现音频播放QAudioOutput功能,文中的示例代码讲解详细,对我们学习Qt开发有一定的帮助,需要的可以参考一下
    2023-03-03
  • C语言中递归的实际应用与经典问题

    C语言中递归的实际应用与经典问题

    函数以及函数的递归调用是学习C语言必须要掌握的内容,且递归作为经典的算法思想被广泛应用于程序设计中,下面这篇文章主要给大家介绍了关于C语言中递归的实际应用与经典问题的相关资料,需要的朋友可以参考下
    2021-09-09
  • C++实现职工工资管理系统

    C++实现职工工资管理系统

    这篇文章主要为大家详细介绍了C++实现简单的职工工资管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C/C++实现内存泄漏检测详解

    C/C++实现内存泄漏检测详解

    这篇文章主要为大家详细介绍了c++进行内存泄漏检测的方法,帮助大家更好的理解和学习使用c++,感兴趣的朋友可以了解下,希望能够给你带来帮助
    2023-02-02
  • C++运算符重载详情介绍

    C++运算符重载详情介绍

    这篇文章主要介绍了C++运算符重载,C++当中除了函数可以重载之外,其实运算符也是可以重载的,C++根据操作数的数目和类型来决定要使用哪一种操作,下面一起进入文章里哦阿姐更多详情吧
    2022-01-01
  • 教你Visual Studio 2022如何新建一个C语言工程(图文详解)

    教你Visual Studio 2022如何新建一个C语言工程(图文详解)

    这篇文章主要介绍了Visual Studio 2022如何新建一个C语言工程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • C语言实现通讯录的详细代码

    C语言实现通讯录的详细代码

    本文详细讲解了C语言实现通讯录的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • exit和atexit的区别详细解析

    exit和atexit的区别详细解析

    以下是对exit与atexit的区别进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-09-09
  • C++重载运算符你真的了解吗

    C++重载运算符你真的了解吗

    这篇文章主要为大家详细介绍了C++重载运算符,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • C++超详细梳理lambda和function的使用方法

    C++超详细梳理lambda和function的使用方法

    C++在C11标准中引入了匿名函数,即没有名字的临时函数,又称之为lambda表达式.lambda表达式 实质上是创建一个匿名函数/对象,这篇文章主要介绍了lambda和function的使用方法
    2022-08-08

最新评论