在C中排序double数组

前端之家收集整理的这篇文章主要介绍了在C中排序double数组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我有一个阵列
double i[5] = {1.023,1.22,1.56,2,5,3.331};

我如何对值进行排序,使它们看起来像这样:

double i[5] = {1.023,3.331,5};

我尝试了一些没有运气的qsort(),在尝试了一些例子之后,我想出了:

qsort(i,sizeof(double),sort);

int sort(const void *x,const void *y)
{
return (*(double*)x - *(double*)y);
}

with =>错误:参数1的类型不兼容
不排序数组…..

解决方法

qsort的第一个参数是指向要排序的数组的开头的指针.代替
qsort(i[5],sort);

它应该读

qsort(i,sort);

进一步的观察:

> i的初始化程序的长度不正确(我有五个元素,但初始化程序有六个).
>将5硬编码到qsort呼叫中是为了以后遇到麻烦.
>名称“i”最常用于循环计数器等.
>调用比较函数排序令人困惑.
>您的比较功能有误.考虑如何比较数字1.1和1.2.还要考虑如果两个值之间的差异不适合int,会发生什么.

我会像这样重写你的整个例子:

double arr[] = {1.023,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);
}

注意,上面的比较函数仍然没有正确处理NaNs;我把它作为练习让读者解决这个问题.

猜你在找的C&C++相关文章