如果我有一个数组
double i[5] = {1.023, 1.22, 1.56, 2, 5, 3.331};
如何对值进行排序,使它们看起来像这样:
double i[5] = {1.023, 1.22, 1.56, 2, 3.331, 5};
我尝试过没有运气的qsort(),在尝试了一些例子之后,我想出了:
qsort(i, 5, sizeof(double), sort);
int sort(const void *x, const void *y)
{
return (*(double*)x - *(double*)y);
}
with => 错误:参数1 的类型不兼容
不排序数组.....
答案 0 :(得分:13)
qsort
的第一个参数是指向要排序的数组的开头的指针。而不是
qsort(i[5], 5, sizeof(double), sort);
应该阅读
qsort(i, 5, sizeof(double), sort);
进一步的观察:
i
初始化程序的长度不正确(i
有五个元素,但初始化程序有六个)。qsort
电话中,以后会遇到麻烦。i
”最常用于循环计数器等。sort
令人困惑。1.1
和1.2
。还要考虑如果两个值之间的差异不适合int
会发生什么。我会像这样重写你的整个例子:
double arr[] = {1.023, 1.22, 1.56, 2, 5, 3.331};
int cmp(const void *x, const void *y)
{
double xx = *(double*)x, yy = *(double*)y;
if (xx < yy) return -1;
if (xx > yy) return 1;
return 0;
}
int main() {
qsort(arr, sizeof(arr)/sizeof(arr[0]), sizeof(arr[0]), cmp);
}
请注意,上述比较功能仍然无法正确处理NaN;我把它作为练习让读者解决这个问题。