C 将2个已排序数组合并到新的已排序数组不起作用。我做错了什么?
此功能将sorted1和sorted2合并到新的排序数组(结果)中。 90%的时间此函数工作正常,但有时1-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
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++]