Для сортировки чисел, используя абсолютное значение, используя 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;
}
2 ответа
bool fun(int i,int j)
{
return abs(i)<abs(j);
}
Функция sort() нуждается в некоторой функции с возвращаемым типом bool, и она принимает вашу функцию int, потому что она может предположить, что если она вернет 0, то она будет ложной, в противном случае это правда. Вы должны просто сказать, правда это или нет, а затем позволить функции sort() выполнить свою работу. Например, если вы измените свою забавную функцию, как я покажу выше, то sort() даст вам вывод в порядке возрастания в абсолютном порядке.
На самом деле я советую вам, в основном, использовать лямбда-выражения для этих функций сортировки, на самом деле, если вы поместите их в авто-переменные, то вы сможете вызывать их проще.
auto func=[](int i, int j) { return abs(i) < abs(j); };
std::sort(arr, arr+n, func);
PS(простите за язык, это не мой родной язык.)
Самый простой в использовании...
std::sort(arr, arr+n, [](int i, int j) { return abs(i) < abs(j); });
... и канава fun
в целом.
Если вы действительно хотите использовать повторно используемую функцию (вместо "лямбда-выражения" выше), взгляните на пример cppreference здесь - конкретно customLess
,