x******a 发帖数: 6336 | 1 comiple的时候提示”Segmentation fault: 11“
void merge(int a[], int const p, int const q, int const r)
{
int n=q-p;
int m=r-q;
int L[n+1];
int R[m+1];
//copy the left part
for(int i=0; i
{
L[i]=a[p+i];
}
//copy the right array
for(int j=0; j
{
R[j]=a[q+j];
}
int i=0;
int j=0;
while( i
{
if(L[i]
{
a[i+j]=L[j];
i++;
}
else
{
a[i+j]=R[j];
j++;
}
}
if(i==n)
{
for(int l=j; l
{
a[n+l]=R[l];
}
}
else
{
for(int l=i; l
{
a[n+l]=L[l];
}
}
}
void Mergesort(int a[], int p, int r)
{
if(p
{
int q=(p+r)/2;
Mergesort(a, p, q);
Mergesort(a, q, r);
merge(a, p, q, r);
}
} | X****r 发帖数: 3557 | 2 Are you sure you got segfault while compiling?
not while running?
BTW, "a[i+j]=L[j];" should be "a[p+i+j]=L[i];", and similar
errors below. "for(int l=j; l
"for(int l=j; l
【在 x******a 的大作中提到】 : comiple的时候提示”Segmentation fault: 11“ : void merge(int a[], int const p, int const q, int const r) : { : int n=q-p; : int m=r-q; : int L[n+1]; : int R[m+1]; : //copy the left part : for(int i=0; i: {
| x******a 发帖数: 6336 | 3 xentar: yes at running, sorry for the mistake input.
【在 X****r 的大作中提到】 : Are you sure you got segfault while compiling? : not while running? : BTW, "a[i+j]=L[j];" should be "a[p+i+j]=L[i];", and similar : errors below. "for(int l=j; l: "for(int l=j; l
| l******d 发帖数: 530 | | p*********t 发帖数: 2690 | 5 a[]数组到底有多大啊?q比p小怎么办?r比q小怎么办?这些都是要考虑的问题。
【在 x******a 的大作中提到】 : comiple的时候提示”Segmentation fault: 11“ : void merge(int a[], int const p, int const q, int const r) : { : int n=q-p; : int m=r-q; : int L[n+1]; : int R[m+1]; : //copy the left part : for(int i=0; i: {
| b***i 发帖数: 3043 | 6 还有,最后if (i==n)
你这两个情况不对称。
循环的时候,一个是i到m,一个是j到n,你都到n,附值回去也不对,
Mergesort里面应该p
【在 x******a 的大作中提到】 : comiple的时候提示”Segmentation fault: 11“ : void merge(int a[], int const p, int const q, int const r) : { : int n=q-p; : int m=r-q; : int L[n+1]; : int R[m+1]; : //copy the left part : for(int i=0; i: {
|
|