我是编程新手。对于赋值,我必须创建一个可以按升序对数组进行排序的函数。我编写了一个函数,但它并不完全有效。我已经在这个论坛上阅读了很多关于此类案例的问题(例如搜索泡泡排序),但是我仍然无法解决我的问题。
我的代码:
void sortOnValue(float *values, int size)
{
int i, d;
float swap;
for (i = 0; i < (size - 1); i++)
{
for (d = 0; d < (size - 1 - i); d++);
{
if (values[d] > values[d+1])
{
swap = values[d];
values[d] = values[d+1];
values[d+1] = swap;
}
}
}
}
void main()
{
int i;
float x, y;
float val[10]; //1.5, 2.2, 7.3, 9.2, 7.4, 7.5, -8.0, 1.5, 12
val[0] = 1.5;
val[1] = 2.2;
val[2] = 7.3;
val[3] = 9.2;
val[4] = 7.4;
val[5] = 7.5;
val[6] = -8.0;
val[7] = 1.5;
val[8] = 12;
printValues(val, 10);
sortOnValue(val, 10);
printValues(val, 10);
}
我的输出:
Values: 1.500 -8.000 2.200 7.300 9.200 7.400 7.500 0.000 1.500 12.000
知道它为什么不起作用?我想这可能是因为循环在它应该之前结束,但我不确定。 另外,有没有比我更有效的方法为数组赋值?
提前感谢您的帮助!
答案 0 :(得分:1)
更改
表示(d = 0; d&lt;(size-1-i); d ++);和d + 1
要
表示(d = i + 1; d&lt; size; d ++)和d + i
将值[i]与值[d + i]进行比较,然后相应地进行交换。
答案 1 :(得分:1)
仔细看看这一行:
// what's this? -------v
for (d = 0; d < (size - 1 - i); d++);
{
在for
的末尾有一个分散的分号。结果,你在这里有一个空循环。然后它下面的块每次运行。
摆脱它,程序按预期运行。
作为一种风格问题,最好将块的左括号与启动它的语句放在同一行上,如下所示:
for (d = 0; d < (size - 1 - i); d++) {
这有助于减少发生类似事情的可能性。
另外,如果要初始化数组,可以这样做:
float val[10] = { 1.5, 2.2, 7.3, 9.2, 7.4, 7.5, -8.0, 1.5, 12, 9.9 };
请注意,之前您没有初始化数组中的所有10个元素。我在这里添加了一个元素来填充整个内容。