Mpr*_*Moe 4 c sorting algorithm pointers
所以,我在C库的C程序中使用qsort.它按预期工作,所以我决定玩比较器.
比较器1(我用它):
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;
}
Run Code Online (Sandbox Code Playgroud)
比较器2:
int comp (const void *a, const void *b)
{
const double *ia = (const double *)a; // casting pointer types
const double *ib = (const double *)b;
return *ia - *ib;
}
Run Code Online (Sandbox Code Playgroud)
第一个按我想要的方式工作.第二个应该是第一个做同样的事情.我想使用第二个,因为程序运行得快一点,但事实上它并没有真正排序任何东西!
我很确定我在较小的阵列上使用了比较器#2并且它有效.除非我在那里遗漏了什么.
第二个应该是第一个做同样的事情.
乍一看它应该是,但仔细检查后发现它不应该.
例如,考虑比较5.3
和4.9
.很明显,第一个数字大于第二个数字; 然而,从另一个中减去一个产生0.4
,在转换为时向下舍入为零int
,告诉qsort
它5.3
并且4.9
彼此相等.
你想要的是将signum函数应用于两个参数的差异.不幸的是,C标准没有定义一个; 看几个好的解决方案的问答.