此文承接<策略模式调用不同排序算法>,归并排序算法的函数参数量为4个,简单排序算法的参数量为2个,接口不兼容,因此采用适配器模式,适配接口。
Sort.h内增加:
class MergeSort :public Sort
{
public:
virtual void sortSeq(int a[], int n);
void sort(int a[], int n, int left, int right);
void mergeTwoList(int a[], int left, int right);
};
增加Merge.cpp:
#include "Sort.h"
void MergeSort::sortSeq(int a[], int n)
{
cout << "mergeSort" << endl;
sort(a, n, 0, n);
}
void MergeSort::sort(int a[], int n, int left, int right)
{
if (left + 1 < right)
{
int mid = (left + right) / 2;
MergeSort::sort(a, n, left, mid);
MergeSort::sort(a, n, mid, right);
MergeSort::mergeTwoList(a, left, right);
}
}
void MergeSort::mergeTwoList(int a[], int left, int right)
{
int mid = (left + right) / 2;
int n1 = mid - left, n2 = right - mid;
int* L = new int[n1];
int* R = new int[n2];
for (int i = 0; i < n1; i++)
L[i] = a[left + i];
for (int j = 0; j < n2; j++)
R[j] = a[mid + j];
int i = 0, j = 0, k = left;
while (i < n1 && j < n2)
{
if (L[i] <= R[j])
a[k++] = L[i++];
else
a[k++] = R[j++];
}
while (i < n1)
a[k++] = L[i++];
while (j < n2)
a[k++] = R[j++];
delete[] L;
delete[] R;
L = R = NULL;
}
运行结果: