使用stl c ++使用绝对值对数字进行排序

to sort the numbers usig absoluter value using stl c++

我正在尝试使用 stl 排序函数根据绝对值对给定数组进行排序,但它没有按指定顺序排序: 我写的代码:

int fun(int i,int j)
{
    if(abs(i)<abs(j))
        return j;
    else
        return i;
}

int main()
{
    int arr[100000];
    int i,n;
    cin>>n;
    for(i=0;i<n;i++)
        cin>>arr[i];
    sort(arr,arr+n,fun);

    int diff=1000000ll;
    int x=0;
    int y,z;

    for i 0 to n
       cout<<arr[i];
    return 0;
}

最容易使用...

std::sort(arr, arr+n, [](int i, int j) { return abs(i) < abs(j); });

...并完全放弃 fun

如果您真的想要一个可重用的函数(而不是上面的 "lambda"),请查看 cppreference example here - 特别是 customLess.

bool fun(int i,int j)
{
   return abs(i)<abs(j);
}

sort() 需要一些具有 return bool 类型的函数并且它接受您的 int 函数,因为它可以假设如果它 return 0 它是假的,否则它是真的。你应该只给出它是真的还是假的,然后让 sort() 函数来完成它的工作。例如,如果你像我上面显示的那样改变你的有趣功能,那么 sort() 会以绝对方式按升序给你输出。

实际上我建议你,这些排序函数主要使用 lambdas,实际上如果你把它们放在自动变量中那么你可以更多地调用它们 easily.Like 那,

auto func=[](int i, int j) { return abs(i) < abs(j); };
std::sort(arr, arr+n, func);

PS(语言不好意思,不是我的母语。)