我對編程不熟悉,現在已經編程了幾個星期。我使用「算法簡介」中描述的算法實施Mergesort。但是,每次執行時,我都會得到一個垃圾值作爲排序數組的第一個元素。請幫助確定問題。下面是它的代碼:Mergesort在執行時爲排序數組的第一個元素提供垃圾值
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
void mergesort(int a[], int p, int r);
void merge(int a[], int p, int q, int r)
{
int *left, *right;
int i,j,k,l,n1,n2;
n1 = q-p+1;
n2 = r-q;
left = malloc(sizeof(int)*(n1+1));
right = malloc(sizeof(int)*(n2+1));
for (i = 0; i < n1; i++) {
left[i] = a[p+i];
}
for (j = 0; j < n2; j++) {
right[j] = a[q+j+1];
}
left[n1] = INT_MAX;
right[n2] = INT_MAX;
i = 0;
j = 0;
for (k = p; k <= r; k++) {
if (left[i] <= right[j]) {
a[k] = left[i];
i++;
}
else {
a[k] = right[j];
j++;
}
}
free(left);
free(right);
return ;
}
int main(int argc, char* argv[])
{
int i;
int a[] = {5,2,4,7,1,3,2,6} ;
mergesort(a,0,sizeof(a)/sizeof(int));
for (i = 0; i < sizeof(a)/sizeof(int); i++) {
printf("%d\n",a[i]);
}
return 0;
}
void mergesort(int a[], int p, int r)
{
if (p < r) {
int q;
q = (p+r)/2 ;
mergesort(a,p,q);
mergesort(a,q+1,r);
merge(a,p,q,r);
}
}
非常感謝。儘管@ToggleButton在下面的評論中提到過,但我厭倦了使用Cygwin在NetBeans中運行代碼,並且它工作正常。 仍然非常感謝您發現問題。 :) – user1043884
@ user1043884其中一個編譯器可能會「初始化」未經初始化的內存以用於調試(或錯誤捕獲)目的。 – Dave