如果想用cmp进行从大到小的排序用下列的代码时,
bool cmp(int a, int b){
if(a != b) return a > b;
}
用PAT判断时 可能会出现段错误;例A1037.
正确的写法应该是
bool cmp(int a, int b){
return a > b;
}
具体原因还不是很懂,但是用cmp一定要保证严格弱排序的规则,一定要保证所有情况都有返回bool的值。严格是说在判断的时候会用"<",而不是"<=",弱排序是因为,一旦"<"成立便认为存在"<"关系,返回ture,而忽略了"="关系和">"区别,把它们归结为false
一个小技巧:
bool cmp(data type a, data type b){
if(a.num == 0 || b.num == 0) return a.num > b.num;
else a.num < b.num;
}
这样就能让num为0的排在后面, 非零的以递增的顺序排在后面。