主题:dev-c++ 的又一个bug
plp626
[专家分:0] 发布于 2010-03-29 08:06:00
我用 的版本是devcpp 4.9.9.0。
[code=c]
// 上冒泡排序
#include <stdio.h>
int main(int argc, char *argv[])
{
int a[]={0,3,4,5,2,1};
int n=4,j,i,t;
for (j=n; j>1 ;j-- )
{
for (i=j; i>1 ;i++)
{
if (a[i-1] < a[i])
{
t=a[i-1]; a[i-1]=a[i]; a[i]=t;
}
}
}
for (i=1; i<=4 ;i++ )
{
printf("%d ",a[i]);
}
getchar();
return 0;
}
[/code]
这个是最通俗的上冒泡排序了,不用我再多说了,可是:
那个printf愣是不能输出半个字符。
目前还不能定位bug在哪里,大家分析下
回复列表 (共5个回复)
沙发
rtygbwwwerr [专家分:910] 发布于 2010-03-29 09:29:00
for (i=j; i>1 ;i++)这句有明显问题,循环条件是i>1,而采用的是累加语句,该循环将无法结束
最终导致数组越界访问触发异常。
板凳
sidtoy [专家分:170] 发布于 2010-03-29 10:18:00
正要能找出 devcpp 的 bug,其实你说的是 gcc3 的 bug,可以参加 compiler 的开发了 :)
另外,即使是普通版的冒泡法,效率还可以改进
3 楼
woaini2000211 [专家分:40] 发布于 2010-03-29 12:36:00
[quote]for (i=j; i>1 ;i++)这句有明显问题,循环条件是i>1,而采用的是累加语句,该循环将无法结束
最终导致数组越界访问触发异常。[/quote]
对头
4 楼
雪光风剑 [专家分:27190] 发布于 2010-03-30 07:35:00
两层循环结束条件居然都是循环变量>1,冒泡的基本思路都混乱了……排不完自然不会输出
冒泡的一般循环结束条件是外层不大于最大下标-1,内层不大于最大下标……
抗议标题党……
5 楼
plp626 [专家分:0] 发布于 2010-04-01 16:59:00
不好意思,本人误将--写成了++;
那个代码确实有问题,现在改过来,算了还是不改了,把算法的伪代码写出来省时间:
i=n:(2:n) ; Let (a[i-1]<=a[i])
我来回复