-2
我正在运行合并排序实现,它在https://code.hackerearth.com/4a1c9cn给出正确的结果,但在http://www.tutorialspoint.com/compile_c_online.php?PID=0Bw_CjBb95KQMVWwxWV9qYlE5V0U错误的结果。不同的C编译器给出不同的结果合并排序
有人可以告诉我的错误和要记住的事情,以避免在未来这样的错误。 样品测试用例:5 3 7 5 9 2 错误答案由所述第二编译器:03579 代码:
#include <stdio.h>
#include <stdlib.h>
void merge(int A[], int left[], int right[], int n)
{
int i=0, j=0, k=0, m = n/2, d = n-m;
while(i<m && j<d)
{
if(left[i] <= right[j]) A[k++] = left[i++];
else A[k++] = right[j++];
}
if(i == m)
for(;k<n; k++, j++) A[k] = right[j];
else if(j == d)
for(; k<n; k++, i++) A[k] = left[i];
return;
}
void MergeSort(int A[], int n)
{
if(n==1) return;
int m = n/2;
int* left = (int*)malloc(m*sizeof(int));
int* right = (int*)malloc((n-m)*sizeof(int));
int i, j;
for(i=0; i<m; i++) left[i] = A[i];
for(i=m; i<n; i++, j++) right[j] = A[i];
MergeSort(left, m);
MergeSort(right, (n-m));
merge(A, left, right, n);
return;
}
int PrintArr(int A[], int n);
void getArr (int A[], int n);
int main(int argc, char** argv)
{
int n, *arr;
scanf("%d", &n);
arr = (int*)malloc(n*sizeof(int));
getArr(arr, n);
MergeSort(arr, n);
PrintArr(arr, n);
return 0;
}
我们不打算点击这些链接。标题暗示你的代码正在调用*未定义的行为*。 –
需要注意的事项:避免未定义的行为,并谨慎使用实现定义的行为。但是,如果您对代码的具体情况有疑问,那么代码需要在问题*中出现*。 –
嗨。为了清晰起见,我添加了代码。 –