【问题标题】:Bubble sort program in cc中的冒泡排序程序
【发布时间】:2012-03-18 01:16:38
【问题描述】:

我用 c 为冒泡排序程序编写了以下代码: http://pastebin.com/Jtcpn59U

但是,冒泡排序功能似乎不起作用。一旦我按照 getArray() 函数的提示输入数组值,程序就会空闲。有谁知道出了什么问题?

【问题讨论】:

  • 你可以提前退出isordered,即在55线上你可以只做return false,在for循环之外做return true

标签: c bubble-sort


【解决方案1】:

注意这部分程序:

for(i=0;i<n;i++)
 {
            if(a[i]>a[i+1])
            {
                           temp=a[i];
                           a[i]=a[i+1];
                           a[i+1]=temp;
            }
 }

当你写 if(a[i]&gt;a[i+1]) 时,a[i+1] 寻找不存在的位置! 只需将您的 for 循环限制为小于 n-1 :

for(i=0;i<n-1;i++)

而不是for(i=0;i&lt;n;i++)

希望,这会奏效! :)

【讨论】:

    【解决方案2】:
     bool flag, i;
     flag=TRUE;
     for(i=0;i<n;i++)
     {
         if(a[i]>a[i+1])
         flag=FALSE;
     }
    

    bool 类型足够大,可以存储值 0 或 1,但您将 i 对象用作索引变量。

    然后在bubbleSortfunction:

     for(i=0;i<n;i++)
     {
         if(a[i]>a[i+1])
         {
             temp=a[i];
             a[i]=a[i+1];
             a[i+1]=temp;
         }
     }
    

    当i 是n - 1 时,您正在访问a[n - 1] 和a[n],但a[n] 在您的数组之外。记住数组是0-origin:你的最后一个数组元素是a[n - 1]

    【讨论】:

      【解决方案3】:

      bubbleSort() 本身有一个非法的内存访问,因为循环变量i 是从 0 到 n-1,但是你访问了 a[i+1]。但这不会导致它闲置。

      同样的问题发生在isordered() 并可能导致它总是返回FALSE - 这可能是你无限递归的原因。

      要解决上述两个问题,请将循环限制减少到 n-1,只要您在循环内访问 i+1。要自己查看错误,请使用 valgrind 运行(即,如果它已安装在您的机器上,请执行 valgrind a.out 将 a.out 替换为您的程序所调用的任何内容)。

      isordered() 应该以 return flag 结尾,而不是愚蠢的测试。

      ouah 的观点(您正在制作循环计数器 bool 而不是 int)也是有效的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-26
        • 2018-11-13
        • 1970-01-01
        • 1970-01-01
        • 2019-04-21
        • 2014-02-25
        相关资源
        最近更新 更多