Visual c++ 递归合并排序C++; 我想用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; } void Merg(int A[],int s1,int e1,int s2,int e2) { int B[8]; int i=0; while(A[s1]

Visual c++ 递归合并排序C++; 我想用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; } void Merg(int A[],int s1,int e1,int s2,int e2) { int B[8]; int i=0; while(A[s1],visual-c++,Visual C++,基本情况是保证排序的数组,因此可以是空数组或长度为1的数组 您的合并函数不正确,但至少包含了大多数正确的想法。您所需要的只是一个进一步的包装循环和一些条件,以防止合并运行超过数组的末尾。split函数完全关闭,拆分不是递归的,在递归mergeSort调用中会发生进一步拆分 如果长度(A)

基本情况是保证排序的数组,因此可以是空数组或长度为1的数组

您的合并函数不正确,但至少包含了大多数正确的想法。您所需要的只是一个进一步的包装循环和一些条件,以防止合并运行超过数组的末尾。split函数完全关闭,拆分不是递归的,在递归
mergeSort
调用中会发生进一步拆分

  • 如果长度(A)<2,则返回//已排序
  • 将A分成下半部分L和上半部分H
  • 合并排序L
  • 合并排序H
  • 合并已排序的L和H
  • 完成
  • 有伪代码。