原理
归并排序采用分治的策略,是一个稳定排序算法。其基本思想是:将待排序的序列划分为长度大致相同的两个子序列,对两个子序列分别进行归并排序,即对子序列进行相同规则的划分与排序,直到子序列的长度为1,最终将排好序的子序列合并成排好序的序列。
实现
归并排序具体有两种实现方式:递归的与非递归的,亦称为从上往下的与从下往上的。
递归实现
思路:
1)将长度为n的待排序序列arr[0:n](左闭右开)一分为二,即取序列中点mid = left + (right-left)/2,将序列分为arr[0:mid]与arr[mid:n]两个子序列
2)对两个子序列执行1)中的操作,直到分出的子序列长度为1
3)将划分的两个子序列合并,即得到排好序的序列
- 动态分配临时数组空间
void Merge(int arr[], int left, int mid, int right)
{
int i = left, j = mid, k = 0;
int *tempArr = new int[right-left+1];
while(i < mid || j < right)
{
if(j >= right || (i < mid && arr[i] <= arr[j]))
tempArr[k++] = arr[i++];