一、复杂度和稳定性
时间复杂度:平均,最好,最坏:O(N*ln(N))
空间复杂度:O(N)
稳定性:稳定
二、CPP实现
#include <vector>
using namespace std;
void merge(vector<int>& src, vector<int>& tmp, int s, int e, int m)
{
int i = s, j = m + 1, k = s;
while(i != m + 1 && j != e + 1)
{
if(src[i] < src[j])
tmp[k++] = src[i];
else
tmp[k++] = src[j];
}
while(i != m + 1)
tmp[k++] = src[i++];
while(j != e + 1)
tmp[k++] = src[j++]
for(i = s; i != end; ++i)
src[i] = tmp[i];
}
void merge_sort(vector<int>& src, vector<int>& tmp, int s, int e)
{
int m = (s + e) >> 1;
while(s < e)
{
merge_sort(src, tmp, s, m);
merge_sort(src, tmp, m + 1, e);
merge(src, tmp, s, e, m);
}
}
int main(int argc, char* argv[])
{
vector<int> arr = {1, 5, 6, 3, 3, 2, 1, 0};
vector<int> tmp(arr.size(), 0);
merge_sort(arr, tmp, 0, arr.size() - 1);
return 0;
}