#include <iostream>
using namespace std;
template <class T1>
void f(T1* a, T1* b, int alen, int blen)
{
for (int i = 0; i < blen; i++)
{
a[alen + i] = b[i];
};
}
template <class T>
void Merge(T* a, T* c, int low, int mid, int high)
{
int left = low;
int right = mid + 1;
int k = low;
while (left < mid + 1 && right < high + 1)
{
if (a[left] > a[right])
{
c[k++] = a[right++];
}
else
{
c[k++] = a[left++];
};
};
while (left < mid + 1)
{
c[k++] = a[left++];
};
while (right < high + 1)
{
c[k++] = a[right++];
};
};
//内部使用递归
template <class T>
void MergeSort(T*a, T*c, int low, int high)
{
if(low >= high)
{
return;
}
//int mid = low + ((high - low) >> 1);
int mid = (low +high) / 2;
MergeSort(a,c, low,mid);
MergeSort(a, c, mid+1,high);
Merge(a, c, low, mid, high);
}
int main()
{
double a[9] = {1.10,2.30,4.10,5.70};
double b[5] = {0.30,1.40,1.60,1.80,3.20};
double c[9];
f<double>(a, b, 4, 5);
cout << "归并排序前:";
for (int i = 0; i < 9; i++)
{
cout << a[i] << " ";
};
cout << endl;
MergeSort<double>(a, c, 0, 8);
cout << "归并排序后:";
for (int i = 0; i < 9; i++)
{
cout << c[i] << " ";
};
return 0;
}