我想用C ++编写一个递归合并排序程序。问题是,我不知道如何让基本案例的想法递归地运作。任何人都可以告诉我Merg Function()
,Split Function()
和MergSort()
函数的基本情况。我会感激你的。
void Merg(int A[], int s1, int e1, int s2, int e2)
{
int B[8];
int i=0;
while (A[s1] < A[s2])
B[i] = B[s1];
i++;
s1++;
if (s1 == e1)
{
B[i] = A[s2];
i++;
s2++;
}
while (A[s2] < A[s1])
B[i] = B[s2];
i++;
s2++;
if (s2 == e2)
{
B[i] = A[s1];
i++;
s1++;
}
}
void Split(int A[], int s, int e)
{
int mid = (s+e)/2;
if (s < e && mid != 0)
{
Split(A, s, mid);
Split(A, mid+1, e);
}
Merg(A, s, mid, mid+1, e);
}
int main()
{
int A[8] = {10,4,8,12,11,2,7,5};
Split(A, 0, 7);
return 0;
}
答案 0 :(得分:1)
基本情况是一个保证排序的数组,所以要么是空数组,要么是长度为1的数组。
您的合并功能不正确,但至少包含大多数正确的想法。您需要的只是一个进一步的包装循环和一些条件,以防止您的合并运行超过数组的末尾。 split函数完全关闭,拆分不是递归的,在递归mergeSort
调用中会发生进一步的拆分。