我写了一些排序算法。为了简单起见,我选择了一个具有唯一值的小数组。每当我编译代码几次时,我都会得到正确的答案,但是有时我会得到一个带有错误的不同答案。我想知道是什么引起了问题。请注意,我正在使用相同的代码。
我正在使用GCC 4.2.1
我尝试使用在线编译器给出正确答案。
#include <stdio.h>
int main(){
int i,j,k,l;
int A[10]={2,10,6,24,1,-5,23,0,12,-100};
for(i=0;i<10;i++){
if(A[i+1]<A[i]){
l=A[i+1];
for(j=0;j<=i;j++){
if((A[j]<A[i+1])&&(A[j+1]>A[i+1])){
for(k=i;k>=j;k--){
A[k+1]=A[k];
}
A[j+1]=l;
}
else if(A[0]>A[i+1]){
for(k=i;k>=0;k--){
A[k+1]=A[k];
}
A[0]=l;
}
}
}
}
for(i=0;i<10;i++){
printf("%d\n",A[i]);
}
}
有时它给出: { -100, -5, 0, 1, 2, 6, 10 12 23 24 } 有时它给出: -791216026, -100, -5, 0, 1, 2, 6, 10 12 23 中止陷阱:6
答案 0 :(得分:1)
您的程序读取了数组之后的内容。
当i
等于9
时,A[j+1]
会在i == j
循环停止条件允许的for(j=0;j<=i;j++)
时读取数组。
这也适用于A[k+1]
答案 1 :(得分:0)
这与您的编译无关。如果您多次运行同一个文件,则可能会发生这种情况。
由于您正在访问不包含特定值的A [10],因此您的程序可能会以不同的方式运行,如果A [10]中的值大于24,则该值将保持在其位置,并且正确的响应将打印出来,否则,它将传播到您的数字之间的某个地方。因此,您丢失了最后一个数字(24),并且数组中有一个随机值。
答案 2 :(得分:-1)
为我提供相同的结果{-100,-5,0,1,2,6,6,10,12,23,24},您可能会得到奇怪的数字的原因是因为数组用完了索引,但是除非代码保持不变,否则不应该发生。