分区算法运行时错误。有人可以帮我找出问题所在吗?
Partition algorithm runtime error. Can someone help me to find what is wrong?
我用C写了一个数组分区算法,但它给我的错误是"segmentation fault: core dumped"。
这是代码:
#include <stdio.h>
int main(void){
int n;
printf("insert array width\n");
scanf("%d", &n);
--n;
int A[n];
int i,j,p;
int x,t;
//inserimento valori array
printf("insert values\n");
for (i=0; i<=n; ++i){
scanf("%d", &A[i]);
}
printf("the array A is:\n");
for (i=0; i<=n; ++i){
printf("%d ", A[i]);
}
printf("\n");
这才是真正的分区算法,问题肯定出在这里。
printf("insert the pivot value\n");
scanf("%d", &x);
i=0;
j=n;
while (i<j && A[i]<=x){
++i;
}
while (i<j && A[j]>x){
++j;
}
if (A[j]>x) {
--j;
}
while (i<j){
t=A[i];
A[i]=A[j];
A[j]=t;
++i;
++j;
while (A[i]<=x){
++i;
}
while (A[j]>x){
++j;
}
}
p=j;
printf("the result of the operation is:\n");
for (i=0; i<=n; ++i){
printf("%d ", A[i]);
}
return 0;
}
谁能帮我找出问题所在?谢谢。
--n;
int A[n];
现在 A
有 n-1
个元素,但您仍然访问不存在的元素 n。至少交换这两行,或者保留原来的 n 值,因为它更多 C-ish(并且 运行 循环直到 i<n
)。
while (i<j && A[j]>x){
++j;
}
你应该减少 j
。
在其余代码中,您不断递增 j,但我相当确定您应该递减它。
我用C写了一个数组分区算法,但它给我的错误是"segmentation fault: core dumped"。 这是代码:
#include <stdio.h>
int main(void){
int n;
printf("insert array width\n");
scanf("%d", &n);
--n;
int A[n];
int i,j,p;
int x,t;
//inserimento valori array
printf("insert values\n");
for (i=0; i<=n; ++i){
scanf("%d", &A[i]);
}
printf("the array A is:\n");
for (i=0; i<=n; ++i){
printf("%d ", A[i]);
}
printf("\n");
这才是真正的分区算法,问题肯定出在这里。
printf("insert the pivot value\n");
scanf("%d", &x);
i=0;
j=n;
while (i<j && A[i]<=x){
++i;
}
while (i<j && A[j]>x){
++j;
}
if (A[j]>x) {
--j;
}
while (i<j){
t=A[i];
A[i]=A[j];
A[j]=t;
++i;
++j;
while (A[i]<=x){
++i;
}
while (A[j]>x){
++j;
}
}
p=j;
printf("the result of the operation is:\n");
for (i=0; i<=n; ++i){
printf("%d ", A[i]);
}
return 0;
}
谁能帮我找出问题所在?谢谢。
--n;
int A[n];
现在 A
有 n-1
个元素,但您仍然访问不存在的元素 n。至少交换这两行,或者保留原来的 n 值,因为它更多 C-ish(并且 运行 循环直到 i<n
)。
while (i<j && A[j]>x){
++j;
}
你应该减少 j
。
在其余代码中,您不断递增 j,但我相当确定您应该递减它。