gpt4 book ai didi

c - 在 C 中对 double 数组进行排序

转载 作者:行者123 更新时间:2023-11-30 15:09:00 25 4
gpt4 key购买 nike

我正在尝试对 C 中的 double 类型的数组进行排序,但没有得到预期的输出。它似乎是对内存地址而不是实际值进行排序。我尝试将 vairables 更改为 (*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

任何帮助将不胜感激。完全公开,这是给学校的,但作业已经提交了,现在我只是想弄清楚如何真正使其发挥作用。

最佳答案

正如 @M Oehm 已经提到的,在打印 double 值时,必须使用 %f 而不是 %g。因此,这样做

printf("%f\n", grade[i]);

而不是

printf("%d\n", grade[i]);

我认为目标是手动编写排序算法。如果没有,您可能想看看 stdlib 提供的 qsort。该函数执行快速排序算法。

// qsort(array pointer, number of elements, size of one element, compare function);
qsort(grade, n, sizeof(double), compare);

为了比较元素,您还需要一个比较函数。

// the compare function for double values
static int compare (const void * a, const void * b)
{
if (*(double*)a > *(double*)b) return 1;
else if (*(double*)a < *(double*)b) return -1;
else return 0;
}

关于c - 在 C 中对 double 数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36940643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com