【问题标题】:Difficulty in merging two sorted arrays合并两个排序数组的困难
【发布时间】:2014-08-13 19:49:43
【问题描述】:

我在合并排序实现中编写了这个函数来合并两个排序数组,但我总是得到错误的输出。

void merge(int array[],int l,int m,int r)
{
   int i,j,k,n1,n2;
   n1=m-l+1;
   n2=r-m;
   int left[n1],right[n2];
   for(i=0;i<n1;i++)
   left[i]=array[l+i]
   for(i=0;i<n2;i++)
   right[i]=array[m+i+1]
   i=0; j=0;
   for(k=l;k<r;k++)
   {
       if(left[i]<=right[j])
       {
         array[k]=left[i];
         i+=1;
       }
        else
       {
         array[k]=right[j];
         j+=1;
       }
}

样本输入:4 6 3 1 2

输出:1 2 3 0 2

我不知道哪里出了问题。我遵循了 Cormen 中给出的合并排序算法。谁能帮帮我?

【问题讨论】:

  • 我不知道这是否能解决问题,但正确格式化您的代码,因为您缺少几个分号。例如:您缩短的for-loops 缺少结束循环的分号。
  • 如果可以的话,请提供我和输入来检查它。
  • 样本输入:- 5 4 1 11 3 9 2 输出给出:- 1 2 0 2 0 1 2
  • 不明白你的问题。你说有两个数组但只有一个输入......你的意思是你将一个数组的内容排序到另一个数组中?
  • 只是合并排序算法中使用的合并函数@FiddlingBits

标签: c algorithm sorting merge mergesort


【解决方案1】:

改变

for(k=l;k<r;k++)
{
    if(left[i]<=right[j])
    {
      array[k]=left[i];
      i+=1;
    }
     else
    {
      array[k]=right[j];
      j+=1;
    }
}

for(k=l;k<=r;k++){
    if(j>=n2 || i<n1 && left[i] <= right[j])
        array[k] = left[i++];
    else
        array[k] = right[j++];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    相关资源
    最近更新 更多