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;我把它作为练习让读者解决这个问题.
@H_403_15@
@H_403_15@
总结
以上是编程之家为你收集整理的在C中排序double数组全部内容,希望文章能够帮你解决在C中排序double数组所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
小编个人微信号 jb51ccc
喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!