回 帖 发 新 帖 刷新版面

主题:dev-c++ 的又一个bug


我用 的版本是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个回复)

沙发

for (i=j; i>1 ;i++)这句有明显问题,循环条件是i>1,而采用的是累加语句,该循环将无法结束
最终导致数组越界访问触发异常。

板凳

正要能找出 devcpp 的 bug,其实你说的是 gcc3 的 bug,可以参加 compiler 的开发了  :)
另外,即使是普通版的冒泡法,效率还可以改进

3 楼

[quote]for (i=j; i>1 ;i++)这句有明显问题,循环条件是i>1,而采用的是累加语句,该循环将无法结束
最终导致数组越界访问触发异常。[/quote]
对头

4 楼

两层循环结束条件居然都是循环变量>1,冒泡的基本思路都混乱了……排不完自然不会输出
冒泡的一般循环结束条件是外层不大于最大下标-1,内层不大于最大下标……
抗议标题党……

5 楼

不好意思,本人误将--写成了++;

那个代码确实有问题,现在改过来,算了还是不改了,把算法的伪代码写出来省时间:

i=n:(2:n) ; Let (a[i-1]<=a[i])

我来回复

您尚未登录,请登录后再回复。点此登录或注册