Функция сортировки не работает должным образом в C ++ - PullRequest
0 голосов
/ 30 сентября 2018

Я переставляю массив int таким образом, чтобы все отрицательные значения находились справа, а все положительные и нули находились слева от массива, без изменения порядка положительных и отрицательных элементов в данном массиве.

ДляПример: -

n = 18

заданный вход : 34 99 40 70 -28 27 -49 96 -18 -90-6 -2 92 82 53 -47 -98 -53

ожидаемый выход : 34 99 40 70 27 96 92 82 53 -28 -49 -18 -90 -6 -2 -47 -98 -53

мой вывод : 99 40 70 34 27 96 53 82 92 -53 -98 -47 -2 -6 -90 -18 -49 -28 -84

#include<algorithm>
#include<iostream>
using namespace std;
bool comp(int a,int b){
    if((a>=0 && b>=0) || (a<0 && b<0)|| (a<0 && b>=0)) return false;
    if(a>=0 && b<0) return true;
}
int main(){
    int n;
    cin>>n;
    int a[n];
    for(int j=0;j<n;j++)cin>>a[j];
    sort(a,a+n,comp);
    for(int j=0;j<n;j++)cout<<a[j]<<" ";
return 0;
}

почему он не перестраивается, как ожидалось?Я не мог найти никаких ошибок.

1 Ответ

0 голосов
/ 30 сентября 2018

Ваш comp() может быть переписан как

bool comp(int a, int b)
{
    return ( a >= 0 && b < 0 );
}

, но проблема в том, что std::sort() не гарантирует, что он сохранит порядок элементов, считающихся равными.Вместо этого используйте std::stable_sort().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...