bool comp(int a,int b){
if ((a > 0 && b > 0) || (a < 0 && b < 0))
return false;
if ((a > 0) && (b < 0))
return false;
}
Run Code Online (Sandbox Code Playgroud)
对于包含正整数和负整数的给定数组,上述函数可用于重新排列数组,使得负整数后跟正整数,并保留元素的顺序.
例:
int arr [] = {1,2,-3,-1}, n=sizeof(arr)/sizeof(int);
sort(arr,arr+n, comp);
output : {-3,-1,1,2}
Run Code Online (Sandbox Code Playgroud)
但我无法理解它是如何工作的,有人可以解释一下吗?
您的断言在两个方面是不正确的:
std::sort是不是保证保留不需要排序,如果你明白我的意思元素的顺序.
comp函数的行为未定义,因为它return在所有控制路径上都没有显式值.
一种补救措施是使用std::stable_sort它将尽可能保持元素的顺序.可以调整比较器函数,使得true如果第一个参数为负且第二个参数为正(让我们将0定义为正):
bool comp(int a, int b){
return a < 0 && b >= 0;
}
Run Code Online (Sandbox Code Playgroud)
另一种补救措施是使用std::stable_partition.