如果我有一个阵列
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); }