参考的剑指offer题36:
http://blog.csdn.net/xiaxzhou/article/details/74347863
#include <algorithm>
#include <numeric>
#include <vector>
using namespace std;
void merge(vector<int>& array,vector<int>& array_copy, int left, int k, int right)
{
if (array.empty()||array_copy.empty()||left>=right)
{
return;
}
int index(left);
int left_index(left), right_index(k + 1);
while (left_index <= k&&right_index <= right)
{
if (array_copy[left_index]<array_copy[right_index])
{
array[index++] = array_copy[left_index++];
}
else
{
array[index++] = array_copy[right_index++];
}
}
while (left_index <= k)
{
array[index++] = array_copy[left_index++];
}
while (right_index<= right)
{
array[index++] = array_copy[right_index++];
}
}
void merge_sort_core(vector<int>& array, vector<int>& array_copy, int left, int right)
{
if (array.empty()||array_copy.empty()||left>=right)
{
return;
}
int k = left + ((right - left) >> 1);
merge_sort_core(array_copy, array, left, k);
merge_sort_core(array_copy, array, k+1, right);
merge(array, array_copy, left, k, right);
}
void merge_sort(vector<int>& array, int len)
{
if (array.empty()||len<2)
{
return;
}
int left(0), right(len - 1);
vector<int> array_copy (array);
merge_sort_core(array, array_copy, left, right);
}
void main()
{
vector<int> array{3, 1, 2, 5, 8, 7, 6, 4};
merge_sort(array, 8);
return;
}