C++实现归并排序算法

 更新时间:2020年03月20日 07:39:02   作者:麦迪尔  
这篇文章主要为大家详细介绍了C++实现归并排序算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

归并

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

算法描述

归并操作的工作原理如下:

1、申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
2、设定两个指针,最初位置分别为两个已经排序序列的起始位置
3、比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
4、重复步骤3直到某一指针超出序列尾
5、将另一序列剩下的所有元素直接复制到合并序列尾

图示

C++代码

#include <iostream>

using namespace std;

//比较相邻序列
void Merge(int arr[],int temp[],int start,int mid,int end){
  int i = start,j = mid + 1,k = start;
  //将较小值放入申请序列
  while(i != mid+1 && j != end+1){
    if(arr[i] > arr[j])
      temp[k++] = arr[j++];
    else
      temp[k++] = arr[i++];
  }
 
 //将多余的数放到序列末尾
  while(i != mid+1)
    temp[k++] = arr[i++];

  while(j != end+1)
    temp[k++] = arr[j++];

 //更新序列
  for(i = start;i <= end;i++)
    arr[i] = temp[i];
}

void MergeSort(int arr[],int temp[],int start,int end){
  int mid;
  if(start < end){
   //避免堆栈溢出
    mid = start + (end - start) / 2;
    //递归调用
    MergeSort(arr,temp,start,mid);
    MergeSort(arr,temp,mid+1,end);
    Merge(arr,temp,start,mid,end);
  }
}

int main(){
  int a[8] = {50, 10, 20, 30, 70, 40, 80, 60};
  int i, b[8];
  MergeSort(a, b, 0, 7);
  for(i=0; i<8; i++)
    cout<<a[i]<<" ";

  return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 去掉vs2010中ipch文件和.sdf文件的解决方法

    去掉vs2010中ipch文件和.sdf文件的解决方法

    本篇文章介绍了,在vs2010中产生的ipch文件和.sdf文件的解决方法。需要的朋友参考下
    2013-05-05
  • C语言中的文件操作详解

    C语言中的文件操作详解

    这篇文章主要介绍了C语言中的文件操作详解,使用文件可以将数据直接存放到电脑的硬盘上,做到了数据的持久化
    2022-07-07
  • C++通过循环实现猜数字小游戏

    C++通过循环实现猜数字小游戏

    这篇文章主要为大家详细介绍了C++通过循环实现猜数字小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • c++ 网络库asio的优势

    c++ 网络库asio的优势

    这篇文章主要介绍了c++ 网络库asio的优势,帮助大家更好的利用c++开发服务端程序,感兴趣的朋友可以了解下
    2020-10-10
  • C语言职工信息管理系统源码

    C语言职工信息管理系统源码

    这篇文章主要为大家详细介绍了C语言职工信息管理系统源码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • C++栈的数组实现代码

    C++栈的数组实现代码

    这篇文章主要介绍了C++栈的数组实现方式,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • C++ 基于BFS算法的走迷宫自动寻路的实现

    C++ 基于BFS算法的走迷宫自动寻路的实现

    这篇文章主要为大家介绍了C++ 基于BFS算法实现走迷宫自动寻路,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • C++实现LeetCode(45.跳跃游戏之二)

    C++实现LeetCode(45.跳跃游戏之二)

    这篇文章主要介绍了C++实现LeetCode(45.跳跃游戏之二),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • 深入sizeof的使用详解

    深入sizeof的使用详解

    本篇文章是对sizeof的使用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++关于指针,继承和多态介绍

    C++关于指针,继承和多态介绍

    大家好,本篇文章主要讲的是C++关于指针,继承和多态介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2022-01-01

最新评论