归并排序(Merge Sort)

归并排序

(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。


  1. 分治法
    可以通俗的解释为:把一片领土分解,分解为若干块小部分,然后一块块地占领征服,被分解的可以是不同的政治派别或是其他什么,然后让他们彼此异化。
    分治法的精髓:
    分–将问题分解为规模更小的子问题;
    治–将这些规模更小的子问题逐个击破;
    合–将已解决的子问题合并,最终得出“母”问题的解;

归并排序
我们经过看这个过程图来了解归并排序。

这里写图片描述

  • 首先,是进行归并的“分”,即__mergeSort(T arr[], int l, int r),将整个数组分成左右两部分。
    int mid = (l + r) / 2; //arr[l...r]

再将左右两部分分别分成左右两部分,直到分成单个元素。

  • 第二步,是进行归并的“并”,即__merge(T arr[], int l, int mid, int r),递归的进行一步步向上的左右两部分的排序,也就是将arr[l…mid]和arr[mid+1…r]两部分进行归并。
    在这里要开辟一个辅助空间,即
T *aux = new T[r - l + 1];

将每次的两部分排序过程在aux空间中进行。


C++完整代码如下:

//归并排序


// 将arr[l...mid]和arr[mid+1...r]两部分进行归并
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值