C 将2个已排序数组合并到新的已排序数组不起作用。我做错了什么?

C 将2个已排序数组合并到新的已排序数组不起作用。我做错了什么?,c,sorting,merge,C,Sorting,Merge,此功能将sorted1和sorted2合并到新的排序数组(结果)中。 90%的时间此函数工作正常,但有时1-2个数字不是它们应该在的位置(大多数时间这些数字是最后一个) 谁能帮我找出我做错了什么 void merge2(int *sorted1,int *sorted2,int *result,int K) { int i,j,k; i=j=k=0; while(i<K && j<K) { if(*(sorted

此功能将sorted1和sorted2合并到新的排序数组(结果)中。 90%的时间此函数工作正常,但有时1-2个数字不是它们应该在的位置(大多数时间这些数字是最后一个)

谁能帮我找出我做错了什么

void merge2(int *sorted1,int *sorted2,int *result,int K)
{   
    int i,j,k;
    i=j=k=0;

    while(i<K && j<K)
    {
        if(*(sorted1+i)>*(sorted2+j))
        {
            *(result+k)=*(sorted2+j);
            j++;
            k++;
            if(*(sorted1+i)<*(sorted2+j))
            {
                *(result+k)=*(sorted1+i);
                i++;
                k++;
            }
        }   
        else if(*(sorted1+i)<*(sorted2+j))
        {
            *(result+k)=*(sorted1+i);
            i++;
            k++;
            if(*(sorted1+i)>*(sorted2+j))
            {
                *(result+k)=*(sorted2+j);
                j++;
                k++;
            }                
        }
        else
        {
            *(result+k)=*(sorted1+i);
            k++;
            i++;
            *(result+k)=*(sorted2+j);
            k++;
            j++;
        }  
    }

    while(i<K)
    {
        *(result+k)=*(sorted1+i);
        i++;
        k++;
    }

    while(j<K)
    {
        *(result+k)=*(sorted1+j);
        j++;
        k++;
    }        
}
void merge2(int*sorted1,int*sorted2,int*result,int K)
{   
int i,j,k;
i=j=k=0;

虽然(i您使用i作为sorted1的计数器,使用j作为sorted2的计数器。当i到达底部的K时,while loop应使用sorted2的剩余元素填充结果的其余部分,但是您使用sorted1的元素填充结果。这意味着无论哪个计数器首先命中K,您都会为其余部分填充sorted1,因此解决方法是:

while(j<K)
{
    *(result+k)=*(sorted2+j);  // This used to be sorted1
    j++;
    k++;
}

while(jI)没有收到太多,但是你的嵌套if语句看起来可能有点奇怪。不过你应该在调试器中浏览一下代码。两个排序列表导致结果排序不正确的示例是什么?
1    if sorted1[i] > sorted2[j]:
2        result[k++] = sorted2[j++]
3        if sorted1[i] < sorted2[j]:
4            result[k++] = sorted1[i++] 
5    else if sorted1[i] < sorted2[j]:
6        result[k++] = sorted1[i++]
7        if sorted1[i] Z sorted2[j]:
8            result[k++] = sorted1[i++]
9    else
10       result[k++] = sorted1[i++]
11       result[k++] = sorted2[j++]
1    if sorted1[i] > sorted2[j]:
2        result[k++] = sorted2[j++]
3    else if sorted1[i] < sorted2[j]:
4        result[k++] = sorted1[i++]
5    else
6        result[k++] = sorted1[i++]
7        result[k++] = sorted2[j++]