如何评估二元谓词?
例如,如果我想按降序排序,那么我应该写:
bool isGreater(int x, int y)
{
return x > y;
}
或
bool isGreater(int x, int y)
{
return y > x;
}
这两者究竟有什么区别?我知道这两个参数会相互比较,但返回结果应该是什么 - true
还是false
?它有什么关系?所以,我的问题基本上是,我如何确定第一个参数是否应该在第二个参数之前,如果我不知道它们将被传递的顺序?
将以这种方式调用sort()
函数(height
是要排序的数组):
sort(height, height+N, isGreater);
注意:我确实引用了this one和this one等链接,但他们没有明确关注此问题。
有人可以澄清我的疑问吗?谢谢!
答案 0 :(得分:2)
这是伪代码中一个非常简单的升序排序算法:
for i ← 1 to length(A)-1
j ← i
while j > 0 and A[j-1] > A[j]
swap A[j] and A[j-1]
j ← j - 1
end while
end for
与谓词相同" MyCompare(x,y){return x< = y; }"看起来像这样:
for i ← 1 to length(A)-1
j ← i
while j > 0 and MyCompare(A[j-1], A[j]) == false
swap A[j] and A[j-1]
j ← j - 1
end while
end for
现在,排序算法只需更改谓词即可按任意顺序排序。由于此谓词是std :: sort的参数,这意味着std :: sort可以按任何顺序排序。