时间复杂度分析
当只有一个元素时,处理时间为常数1;
元素数为N(设N=2^k) 时,处理时间为T(N),每次将数组分为左右两个子数组,处理时间为2T(N/2),合并两个排好序的子数组用时为N
T(N) = 2T(N/2) + N,
两边同除N得:
T(N)/N = T(N/2) / (N/2) + 1
以此类推:
T(N/2) / (N/2) = T(N/4) / (N/4) + 1
…
T(2) = T(1) + 1
由于一共有k = logN个等式,等号两边分别相加,可得
T(N) /N = 1 + logN
即 T(N) = N + NlogN = O(NlogN)
C++归并排序代码
#include <iostream>
#include <vector>
using namespace std;
//合并两个已排好序的数组
void merge(vector<int> & arr, int low, int mid, int high)
{
//创建临时数组存放合并的数组
int *temp = new int(high - low + 1);
int i