c中的冒泡排序程序

时间:2012-03-18 01:16:39

标签: c bubble-sort

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

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

3 个答案:

答案 0 :(得分:4)

注意这部分程序:

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]>a[i+1])时,[i + 1]寻找不存在的位置! 只需将for循环限制为小于n-1:

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

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

希望,这会奏效! :)

答案 1 :(得分:2)

 bool flag, i;
 flag=TRUE;
 for(i=0;i<n;i++)
 {
     if(a[i]>a[i+1])
     flag=FALSE;
 }

bool类型足以存储值0或1但您使用i对象作为索引变量。

然后在bubbleSort函数:

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

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

答案 2 :(得分:1)

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

同样的问题出现在isordered()中,并且可能导致它总是返回FALSE - 这可能是您无限递归的原因。

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

isordered()应该以{{1​​}}而不是愚蠢的测试结束。

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