递归合并排序C ++

时间:2012-01-05 18:54:49

标签: visual-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;
}

1 个答案:

答案 0 :(得分:1)

基本情况是一个保证排序的数组,所以要么是空数组,要么是长度为1的数组。

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

  1. 如果长度(A)< 2返回//已排序
  2. 在下半部分L和上半部分H中分裂A.
  3. merge-sort L
  4. merge-sort H
  5. 合并已排序的L和H
  6. 完成