今天照着《数据结构与算法分析——C语言描述》写快速排序的时候,遇到一个让我百思不得其解的问题,每次都无法得到正确的排序,最后发现结果跟算法的设计一点关系也没有,而是C语言中宏定义的一个大坑,或者说是我自己瞎优化的一个大坑(以上为背景描述,如果还没学到快速排序可跳过)。以下是详细说明。
这是出问题的地方:
while (Compare(List[++i], Pivot) == SMALLER);
while (Compare(List[--j], Pivot) == BIGGER);
其中SMALLER
和BIGGER
是我为了和字符串的比较结果统一而设置的常量,分别是
#define SMALLER -1
#define EQUAL 0
#define BIGGER 1
而Compare
则是宏定义&#