我在c中为冒泡排序程序编写了以下代码: http://pastebin.com/Jtcpn59U
但是,bubblesort功能似乎不起作用。一旦我按照getArray()函数的提示输入数组值,程序就会空闲。有谁知道出了什么问题?
答案 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;
}
}
当i
为n - 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
)也是有效的。