- 论坛徽章:
- 2
|
本帖最后由 gvim 于 2012-04-18 16:44 编辑
回复 568# 陈良乔
真不敢相信你是写书的MVP,最基本的算法啊。。。
FreeBSD
- static inline char *
- med3(char *a, char *b, char *c, cmp_t *cmp, void *thunk
- #ifndef I_AM_QSORT_R
- __unused
- #endif
- )
- {
- return CMP(thunk, a, b) < 0 ?
- (CMP(thunk, b, c) < 0 ? b : (CMP(thunk, a, c) < 0 ? c : a ))
- :(CMP(thunk, b, c) > 0 ? b : (CMP(thunk, a, c) < 0 ? a : c ));
- }
复制代码 GLIBC
- if ((*cmp) ((void *) mid, (void *) lo) < 0)
- SWAP (mid, lo, size);
- if ((*cmp) ((void *) hi, (void *) mid) < 0)
- SWAP (mid, hi, size);
- else
- goto jump_over;
- if ((*cmp) ((void *) mid, (void *) lo) < 0)
- SWAP (mid, lo, size);
- jump_over:;
复制代码 MS VC9-
- if (__COMPARE(context, lo, mid) > 0) {
- swap(lo, mid, width);
- }
- if (__COMPARE(context, lo, hi) > 0) {
- swap(lo, hi, width);
- }
- if (__COMPARE(context, mid, hi) > 0) {
- swap(mid, hi, width);
- }
复制代码 我只是初略看了下,没仔细看。
你用vc,它只比较>0,当然看起来不会出问题。像你549楼- return file1->correlation > file2->correlation ? 0 : 1;
复制代码 不给 <0 的,放在freebsd和glibc里面试试看呢?
ps: 写书的时候先使自己有这个实力写书吧哥,我替那些看你书的人先谢谢你了。本不想再回你的低级问题,只是担心那些可能被你写书误导的人。。。作孽 |
|