【发布时间】:2012-10-05 11:19:00
【问题描述】:
我正在使用 Ubuntu Linux 进行编程。昨天我遇到了一个非常奇怪的问题,它真的很晦涩,很奇怪。
问题是我尝试进行冒泡排序,逻辑,语法一切都是正确的,但输出是错误的。我在 Windows 中编写了相同的程序,它运行良好。我在 Linux 中使用 Eclipse IDE。可能是什么问题?另一方面,我使用指针(通过引用调用)来完成冒泡排序,但在 Ubuntu 中输出也是错误的,而在 Windows 中输出还可以。我不知道怎么弄出来的。
我的冒泡排序代码如下:
#include<stdio.h>
void main(void)
{
int array[] = {4,2,6,3,1,5,8,4,6,1};
int i=0;
int j=0;
for(i=1;i<=10;i++)
{
for(j=0;j<=10-i;j++)
{
if(array[j]>array[j+1])
{
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
for(i=0;i<=9;i++)
{
printf("%d\t",array[i]);
}
}
输出:
gcc -o bubblesort.c -o output
./output
2 3 4 1 5 6 4 6 1 1
【问题讨论】:
-
第一次通过第二个循环,您将到达
i=1、j=9、array[j+1]是无效访问 => 您的代码表现出未定义的行为。 -
GNU C compiler Linux output is wrong-- 这句话的意思是您在输入时认为的意思,这种情况极为罕见。几乎总是,这意味着你搞砸了,而不是编译器。 -
@mah - 我编辑了标题等。希望它现在更接近事实(更具体)
-
感谢@ArjunShankar 澄清我的头衔...