一、思路:稳定排序
(1)划分:一直调用划分过程,直到子序列为空或只有一个元素为止,共需log2(n);
(2)归并:将两个子序列从小到大合并为一个序列
二、实现程序:
// 归并排序:(二路归并)
// (1)递归分解数组;
// (2)合并有序的序列
#include <iostream>
using namespace std;
// 合并两个有序的序列
template <typename T>
void Merge(T arr[], int start, int mid, int end) {
int i, j, k, n1, n2;
k=0;
n1 = mid - start + 1;
n2 = end - mid;
T *L = new T[n1], *R = new T[n2];
for(i = 0; i < n1; i++) // 将arr的左部分赋给L