【发布时间】:2016-08-24 18:01:27
【问题描述】:
我正在尝试在 C 中对 double 类型的数组进行排序,但没有得到预期的输出。它似乎是对内存地址而不是实际值进行排序。我尝试将变量更改为 (*grade[i]) 但随后出现“一元 * 的无效类型参数”错误。这是有问题的代码片段。
void sortGrade(double grade[], int n){
int i, j, swapped;
double temp;
for (i = 0; i < n; ++i)
{
for (j = i + 1; j < n; ++j)
{
if (grade[i] < grade[j])
{
temp = grade[i];
grade[i] = grade[j];
grade[j] = temp;
}//end if
}//end inner for
}//end outer for
printf("After sort:\nGrade\n");
for (i = 0; i < n; ++i)
{
printf("%d\n", grade[i]);
}//end for
}//end sortGrade
任何帮助将不胜感激。 完全公开,这是给学校的,但是作业已经提交了,现在我只是想弄清楚如何让它真正发挥作用。
【问题讨论】:
-
你的排序算法没问题。打印时出现错误:使用
%f或%g打印浮点数。 -
很难说如果你不告诉我们预期的输出是什么。显然,您应该在编译器中打开警告,因此不需要 M Oehms 建议。修复后,它将被排序,但可能不是您期望的方式。
-
如果你对内存地址进行排序,那么显然项目的顺序不会改变。数组元素总是按内存地址排序。
-
M Oehm - 就是这样。现在一切正常。哇,我觉得自己像个白痴……谢谢你的帮助!
-
周末不要觉得自己像个白痴,但下次一定要激活警告。
:)