合并两个排序数组的难度

时间:2014-08-13 19:49:44

标签: c algorithm sorting merge mergesort

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

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中给出的Merge-Sort算法。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分: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;
    }
}

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